gpt4 book ai didi

c# - 获取通用枚举的基础值

转载 作者:行者123 更新时间:2023-12-04 19:46:54 25 4
gpt4 key购买 nike

我想为给定的通用 Enum 类型生成基础值和名称的列表。我想要原生的基础值(作为 object)。

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

最佳答案

最简单的:

.Select(ev => Convert.ChangeType(ev, underlyingType))

但我更喜欢返回一个正确类型的数组——那时你甚至不需要转换步骤:

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

关于c# - 获取通用枚举的基础值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com