Files
Common-VS2019/SacsStandardBase/Base/Utils/EnumUtil.cs
T
2021-05-05 15:36:28 +01:00

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