You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
787 B
25 lines
787 B
1 year ago
|
namespace StabilityMatrix.Core.Extensions;
|
||
1 year ago
|
|
||
|
public static class EnumConversionExtensions
|
||
|
{
|
||
|
public static T? ConvertTo<T>(this Enum value) where T : Enum
|
||
|
{
|
||
|
var type = value.GetType();
|
||
|
var fieldInfo = type.GetField(value.ToString());
|
||
|
// Get the string value attributes
|
||
|
var attribs = fieldInfo?.GetCustomAttributes(typeof(ConvertToAttribute<T>), false) as ConvertToAttribute<T>[];
|
||
|
// Return the first if there was a match.
|
||
|
return attribs?.Length > 0 ? attribs[0].ConvertToEnum : default;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[AttributeUsage(AttributeTargets.Field)]
|
||
|
public sealed class ConvertToAttribute<T> : Attribute where T : Enum
|
||
|
{
|
||
|
public T ConvertToEnum { get; }
|
||
|
public ConvertToAttribute(T toEnum)
|
||
|
{
|
||
|
ConvertToEnum = toEnum;
|
||
|
}
|
||
|
}
|