如何获取按位枚举的属性
How to get attributes of bitwise enum
我有多个值的按位枚举,每个值都有一个描述属性。
[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
}
我已经使用并尝试了多种扩展方法,我在其他一些与此非常相似的问题上发现了这些方法
Getting attributes of Enum's value
How to get attributes of enum
我目前正在使用 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
等)
您必须检索位组合的每个值,例如:
var result = new List<string>();
foreach (var parkingAreaType in Enum.GetValues(typeof(ParkingAreaType)))
{
if (value.HasFlag(parkingAreaType))
{
result.Add(GetDescription(parkingAreaType));
}
}
我有多个值的按位枚举,每个值都有一个描述属性。
[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
}
我已经使用并尝试了多种扩展方法,我在其他一些与此非常相似的问题上发现了这些方法
Getting attributes of Enum's value
How to get attributes of enum
我目前正在使用 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
等)
您必须检索位组合的每个值,例如:
var result = new List<string>();
foreach (var parkingAreaType in Enum.GetValues(typeof(ParkingAreaType)))
{
if (value.HasFlag(parkingAreaType))
{
result.Add(GetDescription(parkingAreaType));
}
}