获取通用枚举的基础价值

Mon*_*eur 2 .net c# generics enums types

我想生成给定泛型Enum类型的基础值和名称列表.我想要原生的潜在价值(如objects).

    public static ReadOnlyCollection<EnumerationMember> ListFromEnum<TEnum>()
    {
        Type enumType = typeof(TEnum);
        if (!enumType.IsEnum)
        {
            throw new InvalidOperationException("TEnum is not an enum");
        }

        Type underlyingType = Enum.GetUnderlyingType(enumType);
        TEnum[] enumValues = (TEnum[])Enum.GetValues(enumType);

        return enumValues
            .Select(ev => new EnumerationMember(
                (???)ev,
                EnumerationExtension.GetDescription(enumType, ev)))
            .ToList()
            .AsReadOnly();
    }

    public class EnumerationMember
    {
        public EnumerationMember(object value, string description)
        {
            this.Value = value;
            this.Description = description;
        }

        public object Value { get; private set; }

        public string Description { get; private set; }
    }
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

最简单的:

.Select(ev => Convert.ChangeType(ev, underlyingType))
Run Code Online (Sandbox Code Playgroud)

但我的偏好是返回一个右键型数组 - 你甚至不需要转换步骤:

public static Array ListValuesFromEnum<T>()
{
    Type enumType = typeof(T);
    Type underlyingType = Enum.GetUnderlyingType(enumType);
    Array enumValues = Enum.GetValues(enumType);

    var arr = Array.CreateInstance(underlyingType, enumValues.Length);
    enumValues.CopyTo(arr, 0);
    return arr;
}
Run Code Online (Sandbox Code Playgroud)