Как я могу получить количество элементов, определенных в перечислении?
318
Вы можете использовать статический метод, Enum.GetNames
который возвращает массив, представляющий имена всех элементов в перечислении. Свойство length этого массива равно количеству элементов, определенных в перечислении
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
Вопрос в том:
Количество «предметов» может означать две совершенно разные вещи. Рассмотрим следующий пример.
Какое количество "предметов" определено в
MyEnum
?Количество предметов 5? (
A
,B
,C
,D
,E
)Или это 3? (
1
,2
,3
)Количество имен, определенных в
MyEnum
(5), может быть вычислено следующим образом.Число значений, определенных в
MyEnum
(3), может быть вычислено следующим образом.источник
var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
.Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ...
;).Enum.GetValues (typeof (MyEnum)). Длина;
источник
Отличный трюк, который я видел в ответе C на этот вопрос, просто добавьте последний элемент в enum и используйте его, чтобы указать, сколько элементов в enum:
В случае, когда вы определяете начальное значение, отличное от 0, вы можете использовать NumberOfTypes - Type1 для определения количества элементов.
Я не уверен, что этот метод будет быстрее, чем использование Enum, и я также не уверен, будет ли он рассматриваться как правильный способ сделать это, так как у нас есть Enum, чтобы выяснить эту информацию для нас.
источник
Из предыдущих ответов просто добавив пример кода.
источник
Вы можете использовать Enum.GetNames, чтобы возвратить IEnumerable значений в вашем перечислении, а затем .Count получить итоговый IEnumerable.
GetNames дает тот же результат, что и GetValues, но работает быстрее.
источник
Если вы обнаружите, что пишете вышеупомянутое решение так же часто, как и я, вы можете реализовать его как универсальный:
источник
Я изучал это только сейчас и не был доволен удобочитаемостью текущего решения. Если вы пишете код неформально или в небольшом проекте, вы можете просто добавить еще один элемент в конец вашего перечисления под названием «Длина». Таким образом, вам нужно всего лишь набрать:
Конечно, если другие собираются использовать ваш код - или я уверен, что при многих других обстоятельствах, которые не применимы ко мне в этом случае, - это решение может быть где-то от плохого совета до ужасного.
источник
Для Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
не работал со мной, но[Enum].GetNames(GetType(Animal_Type)).length
сделал.источник