当多个值具有相同值时,从Enum获取属性名称

时间:2014-01-05 05:00:20

标签: c# string enums

我有这个枚举:

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属性填充List。

我有这种方法试图这样做:

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:休息时的呼吸困难

由于限制性呼吸困难和中度COPD具有相同的值4,并且休息和纤维化的呼吸困难具有相同的值8,因此看起来Enum.GetValues()仅获取第一个值并获取该字符串属性。尽管重复值,我如何获得所有枚举名称?

1 个答案:

答案 0 :(得分:0)

你不能做st。像这样,请参阅此问题以获取更多信息: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"