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