Files
Common-VS2019/SacsStandardBase/Base/Utils/EnumUtil.cs
T
2024-10-29 08:41:11 +00:00

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;
}
//-------------------------------------------------------------------
}
//=======================================================================
}