96 lines
3.1 KiB
C#
96 lines
3.1 KiB
C#
using Sarand.Net.Standard.Base.App;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Sarand.Net.Standard.Base.Utils
|
|
{
|
|
//=======================================================================
|
|
public static class EnumUtil
|
|
{
|
|
//-------------------------------------------------------------------
|
|
public static bool IsValid<TEnum> (int value) where TEnum : struct, IConvertible
|
|
{
|
|
try
|
|
{
|
|
TEnum t = (TEnum)Enum.Parse(typeof(TEnum), value.ToString(), true);
|
|
return true;
|
|
}
|
|
catch (Exception) { }
|
|
return false;
|
|
}
|
|
public static bool IsValid<TEnum> (String value) where TEnum : struct, IConvertible
|
|
{
|
|
try
|
|
{
|
|
TEnum t = (TEnum)Enum.Parse(typeof(TEnum), value, true);
|
|
return true;
|
|
}
|
|
catch (Exception) { }
|
|
return false;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Get Name for enum value.
|
|
/// </summary>
|
|
/// <typeparam name="TEnum"></typeparam>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
public static String GetName<TEnum> (Object value) where TEnum : struct, IConvertible
|
|
{
|
|
return Enum.GetName(typeof(TEnum), value);
|
|
}
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// <para>Get enum values.</para>
|
|
/// <para>Usage: var values = EnumUtil.GetValues<Foos>();</para>
|
|
/// </summary>
|
|
/// <typeparam name="TEnum">Enum type</typeparam>
|
|
/// <returns></returns>
|
|
public static IEnumerable<TEnum> GetValues<TEnum> () where TEnum : struct, IConvertible
|
|
{
|
|
return Enum.GetValues(typeof(TEnum)).Cast<TEnum>();
|
|
}
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// <para>Convert String to enum.</para>
|
|
/// </summary>
|
|
/// <typeparam name="TEnum"></typeparam>
|
|
/// <param name="value"></param>
|
|
/// <returns></returns>
|
|
public static TEnum ParseEnum<TEnum> (string value) where TEnum : struct, IConvertible
|
|
{
|
|
return (TEnum)Enum.Parse(typeof(TEnum), value, true);
|
|
}
|
|
public static TEnum ParseEnum<TEnum> (string value, TEnum defaultValue) where TEnum : struct, IConvertible
|
|
{
|
|
if (StringUtil.IsEmpty(value)) return defaultValue;
|
|
try
|
|
{
|
|
return (TEnum)Enum.Parse(typeof(TEnum), value, true);
|
|
}
|
|
catch (Exception exc) { SaLogger.Debug("EnumUtil.ParseEnum " + ExceptionUtil.GetErrorStateMessage(exc) + " [Enum: " + typeof(TEnum).Name + ". Value: " + value + "]"); }
|
|
return defaultValue;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Retrieve the first enum value whose name starts with the specified value.
|
|
/// </summary>
|
|
/// <typeparam name="TEnum"></typeparam>
|
|
/// <param name="value"></param>
|
|
/// <param name="defaultValue"></param>
|
|
/// <returns></returns>
|
|
public static TEnum StartsWith<TEnum> (string value, TEnum defaultValue) where TEnum : struct, IConvertible
|
|
{
|
|
foreach (TEnum t in GetValues<TEnum>())
|
|
{
|
|
if (value.EqualsCI(GetName<TEnum>(t).Left(value.Length)))
|
|
return t;
|
|
}
|
|
return defaultValue;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|