[英]C# How can I get a list of enum string in [EnumMember]?
我尝试获取 [EnumMember] 中的值列表,但它不起作用。 它返回枚举名称列表,而不是 [EnumMember] 中的值。
我举个例子来说明我想要什么:
CarEnum.cs
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum CarEnum
{
[EnumMember(Value = @"Rolls Royce")]
RollsRoyce=1,
[EnumMember(Value = @"Honda")]
Honda = 2,
[EnumMember(Value = @"Mercedes Benz")]
MercedesBenz = 3,
}
这是我尝试获取值的代码:
var carList = Enum.GetValues(typeof(CarEnum)).Cast<CarEnum>()
.Select(x => x.ToString())
.ToList();
carList
返回["RollsRoyce", "Honda", "MercedesBenz"]
的列表。
我希望它返回["Rolls Royce", "Honda", "Mercedes Benz"]
(值包含品牌名称中的空格)。
如果你能帮助我,请告诉我。
谢谢。
感谢@phuzi 在评论中提供参考帖子。
根据帖子,我已将答案修改如下,并且可以正常工作。
public static List<string> GetEnumMemberValues<T>() where T : struct, IConvertible
{
List<string> list = new List<string>();
var members = typeof(T)
.GetTypeInfo()
.DeclaredMembers;
foreach (var member in members)
{
var val = member?.GetCustomAttribute<EnumMemberAttribute>(false)?.Value;
if (!string.IsNullOrEmpty(val))
list.Add(val);
}
return list;
}
用法:
将该方法放入 class 中。 我把它放到 EnumExtension 中。
像这样调用这个方法:
var carList = EnumExtension.GetEnumMemberValues();
carList
返回["Rolls Royce", "Honda", "Mercedes Benz"]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.