我是按位枚举,它有多个值,每个值都有一个描述属性。
[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
我目前正在使用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();
}
如果我只传入一个枚举,上面的代码将起作用,但如果我传入一个按位枚举,它将抛出一个Object Reference。我从不同的例子中尝试了以上几种不同的变体,但都有相同的结果。
我只是想弄清楚如何获取传入的描述列表。
答案 0 :(得分:3)
那是因为没有例如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));
}
}