[英]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.