我想为给定泛型Enum
类型生成底层值和名称的列表。我想要原生的基础值(如object
s)。获取泛型Enum的底层值
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; }
}
我认为,但我不知道它是否会运行它通过常规转换函数或只是内部将其转换为underlyingType。有什么方法可以使用Type来显式执行演员,还是这样? – Monstieur
@Kurian好吧,我检查了一下,它似乎有效 - 盒装值被输入为“short”(等),而不是“SomeEnum”。顺便说一句,我个人会尝试返回一个'short []'(通过'Array'作为方法的返回类型),但这只是我;这个代码并没有太大的区别。 –
@Kurian ooh,发现如果使用右类型的数组方法,内置的保留值转换会自动处理它 - 请参阅编辑 –