116 lines
3.7 KiB
C#
116 lines
3.7 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;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
public static HashSet<TEnum> ParseEnums<TEnum>(IEnumerable<String> values) where TEnum : struct, IConvertible
|
|
{
|
|
HashSet<TEnum> enums = new HashSet<TEnum>();
|
|
foreach (String value in values)
|
|
{
|
|
try
|
|
{
|
|
enums.Add((TEnum)Enum.Parse(typeof(TEnum), value, true));
|
|
}
|
|
catch (Exception exc) { SaLogger.Debug("EnumUtil.ParseEnums " + ExceptionUtil.GetErrorStateMessage(exc) + " [Enum: " + typeof(TEnum).Name + ". Value: " + value + "]"); }
|
|
}
|
|
return enums;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <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;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|