[英]How to get attributes of bitwise enum
我有按位枚舉,它具有多個值,每個值都有一個description屬性。
[Flags]
public enum ParkingAreaType
{
[Description("Car Park")]
CarPark = 1,
[Description("Residential Permit")]
ResidentialPermitZone = 2,
[Description("Commercial Permit")]
CommercialPermitZone = 4,
[Description("On Street Parking")]
OnStreetParking = 8,
Any =
CarPark | ResidentialPermitZone | CommercialPermitZone
}
我已經使用並嘗試了多種擴展方法,這些方法是在其他一些與此非常類似的問題上發現的
我目前正在使用John Skeets EnumInternals https://github.com/jskeet/unconstrained-melody/blob/master/UnconstrainedMelody/EnumInternals.cs中的代碼片段
private static string GetDescription(T value)
{
FieldInfo field = typeof(T).GetField(value.ToString());
return field.GetCustomAttributes(typeof(DescriptionAttribute), false)
.Cast<DescriptionAttribute>()
.Select(x => x.Description)
.FirstOrDefault();
}
如果我只是傳入一個枚舉,則上面的代碼將起作用,但是如果傳入一個按位枚舉,它將拋出一個對象引用。 我已經從不同的示例嘗試了上述幾種不同的變體,但所有結果都相同。
我只是想不通如何獲取傳入的描述列表。
這是因為沒有名為CarPark | ResidentialPermitZone | CommercialPermitZone
字段CarPark | ResidentialPermitZone | CommercialPermitZone
CarPark | ResidentialPermitZone | CommercialPermitZone
例如, CarPark | ResidentialPermitZone | CommercialPermitZone
(或CarPark | ResidentialPermitZone
等)
您必須檢索位組合的每個值,例如:
var result = new List<string>();
foreach (var parkingAreaType in Enum.GetValues(typeof(ParkingAreaType)))
{
if (value.HasFlag(parkingAreaType))
{
result.Add(GetDescription(parkingAreaType));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.