簡體   English   中英

如何獲得按位枚舉的屬性

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM