【问题标题】:Getting attribute name from Enum when several values have same value当多个值具有相同值时从 Enum 获取属性名称
【发布时间】:2014-01-05 05:00:20
【问题描述】:

我有这个枚举:

public enum PPossumResp
{
    [EnumName("No Dyspnea")]
    NoDyspnea = 1,

    [EnumName("Dyspnea On Exertion")]
    DyspneaOnExertion = 2,

    [EnumName("Mild COPD on CXR")]
    MildCOPDonCXR = 2,

    [EnumName("Limited Dyspnea")]
    LimitedDyspnea = 4,

    [EnumName("Moderate COPD")]
    ModerateCOPD = 4,

    [EnumName("Dyspnea At Rest")]
    DyspneaAtRest = 8,

    [EnumName("Fibrosis")]
    Fibrosis = 8
}

我正在尝试使用所有 EnumName 属性填充列表。

我有这个方法可以尝试:

public EnumPickerViewModel(Parameter param)
{
    this.param = param;
    List<string> enumNames = new List<string>();

    foreach(Enum type in Enum.GetValues(param.Value.GetType()))
    {
        enumNames.Add(Utils.GetEnumName(type));
    }
}

不幸的是,enumNames 填充了以下内容: 0:无呼吸困难 1:劳累呼吸困难 2:CXR 上的轻度 COPD 3:有限的呼吸困难 4:有限的呼吸困难 5:休息时呼吸困难 6:休息时呼吸困难

由于 Limited Dyspnea 和 Moderate COPD 的值相同,均为 4,而 Dyspnea at Rest 和 Fibrosis 的值相同,均为 8,看起来 Enum.GetValues() 仅获取第一个值并采用该字符串属性。尽管有重复值,如何获取所有枚举名称?

【问题讨论】:

    标签: c# string enums


    【解决方案1】:

    你不能这样做。像这样,有关更多信息,请参阅此问题:Non-unique enum values

    但作为一种解决方法,我建议您使用[Flags] 属性。 enum 定义将是 st。像这样:

    [Flags]
    public enum PPossumResp
    {
        NoDyspnea = 1,
    
        DyspneaOnExertion = 2,
    
        MildCOPDonCXR = 4,
    
        LimitedDyspnea = 8,
    
        ModerateCOPD = 16,
    
        DyspneaAtRest = 32,
    
        Fibrosis = 64
    }
    

    你可以这样使用它:

        PPossumResp values = (PPossumResp)(4 | 8);
    

    因此,如果您得到 values 的字符串表示形式,例如 values.ToString(),则输出将如下所示:

    Output:
    
    "MildCOPDonCXR, LimitedDyspnea"
    

    【讨论】:

    • 我需要字符串 EnumNames。对于这个特定的枚举,名称与字符串相似,但在其他方面则非常不同,包括特殊字符、数字等
    • 为此,您可以编写一个简单的 switch 语句来获取枚举的字符串表示形式,或者您可能会发现这很有用:stackoverflow.com/questions/630803/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多