我有这个枚举:
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()仅获取第一个值并获取该字符串属性。尽管重复值,我如何获得所有枚举名称?
答案 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"