2014-01-05 71 views
0

我有这样的枚举:从枚举获取属性名称时多个值具有相同的值

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 3 :有限呼吸困难 4:限定呼吸困难 5:呼吸困难在休息 6:呼吸困难在休息

由于限定呼吸困难和中度COPD具有4在RES相同的值,和呼吸困难t和Fibrosis具有相同的值8,它看起来像Enum.GetValues()只获取第一个值并接受该字符串属性。尽管重复值,我怎样才能得到所有的枚举名称?

回答

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" 
+0

我需要字符串EnumNames。对于这个特定的枚举,名称与字符串类似,但在其他字符中,它们是非常不同的,包括特殊字符,数字等。 – BBH1023

+0

为此,您可以编写一个简单的* sw​​itch *语句来获取枚举的字符串表示形式,或者看到这个有用的:http://stackoverflow.com/questions/630803/associating-enums-with-strings-in-c-sharp –

相关问题