Тип .NET Enum с несколькими определениями - PullRequest
1 голос
/ 16 июня 2011

Представьте себе это перечисление:

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.

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

Это должно работать:

var values = typeof(eMyEnum).GetEnumValues().Select(v => (int)v).Distinct();
2 голосов
/ 16 июня 2011

Это синтаксис 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
0 голосов
/ 16 июня 2011

Linq может прийти на помощь:

IEnumerable<eMyEnum> values = typeof(eMyEnum).GetEnumValues()
                               .Cast<int>().Distinct().Cast<eMyEnum>();

Обратите внимание, что это даст вам только cValue2, а не cValue2_too, я думаю.

...