我有这个枚举:
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:轻度慢性阻塞性肺疾病3:局限性呼吸困难4:局限性呼吸困难5:休息时呼吸困难6:休息时呼吸困难
由于局限性呼吸困难和中度慢性阻塞性肺疾病的值相同,而静息时的呼吸困难和纤维化的值也相同,因此看起来Enum.GetValues()只获取第一个值并接受该字符串属性。我怎样才能获得所有的枚举名称,而不是重复的值?
发布于 2014-01-05 13:33:26
你不能这样做。像这样,请参考这个问题以获取更多信息: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.ToString()
这样的values
字符串表示,则输出将如下所示:
Output:
"MildCOPDonCXR, LimitedDyspnea"
https://stackoverflow.com/questions/20930262
复制相似问题