想象一下这个枚举:
public enum eMyEnum
{
cValue1 = 0,
cValue2 = 1,
cValue2_too = 1,
cValue3 = 5
}
有没有办法迭代所有值(而不是标签)?如果我试试
var values = typeof(eMyEnum).GetEnumValues();
我最终得到{cValue1,cValue2,cValue2,cValue3}
,而我正在寻找一种方法来检索{cValue1,cValue2,cValue3}
。注意:我故意留下1到5之间的差距。
答案 0 :(得分:3)
这应该有效:
var values = typeof(eMyEnum).GetEnumValues().Select(v => (int)v).Distinct();
答案 1 :(得分:2)
这是VB.NET语法,如果有人感兴趣的话:
[Enum].GetValues(GetType(eMyEnum)).Cast(of eMyEnum).Distinct
或
GetType(eMyEnum).GetEnumValues().Cast(of eMyEnum).Distinct
所以这应该是C#版本(无法测试):
Enum.GetValues(typeof(eMyEnum)).Cast<eMyEnum>().Distinct
或
typeof(eMyEnum).GetEnumValues().Cast<eMyEnum>().Distinct
答案 2 :(得分:0)
Linq可以为此解救:
IEnumerable<eMyEnum> values = typeof(eMyEnum).GetEnumValues()
.Cast<int>().Distinct().Cast<eMyEnum>();
请注意,我认为这只会让你获得cValue2而不是cValue2_too。