Как я могу получить количество элементов, определенных в перечислении?
Общее количество элементов, определенных в перечислении
Ответ 1
Вы можете использовать статический метод Enum.GetNames, который возвращает массив, представляющий имена всех элементов в перечислении. Свойство length этого массива равно числу элементов, определенных в перечислении
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
		Ответ 2
Возникает вопрос:
Как я могу получить количество элементов, определенных в перечислении?
Количество "предметов" может означать две совершенно разные вещи. Рассмотрим следующий пример.
enum MyEnum
{
    A = 1,
    B = 2,
    C = 1,
    D = 3,
    E = 2
}
Каково количество "элементов", определенных в MyEnum?
Число элементов 5? (A, B, C, D, E)
Или это 3? (1, 2, 3)
Число имен, определенных в MyEnum (5), можно вычислить следующим образом.
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
Число значений, определенных в MyEnum (3), можно вычислить следующим образом.
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
		Ответ 3
Enum.GetValues (typeof (MyEnum)). Длина;
Ответ 4
Отличный трюк, который я видел в ответе C на этот вопрос, просто добавьте последний элемент в перечисление и используем его, чтобы указать, сколько элементов в перечислении:
enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}
В случае, когда вы определяете начальное значение, отличное от 0, вы можете использовать NumberOfTypes - Type1 для определения количества элементов.
Я не уверен, что этот метод будет быстрее, чем использование Enum, и я также не уверен, будет ли это считаться правильным способом, так как у нас есть Enum для выяснения этой информации для нас.
Ответ 5
Из предыдущих ответов просто добавляется образец кода.
 class Program
    {
        static void Main(string[] args)
        {
            int enumlen = Enum.GetNames(typeof(myenum)).Length;
            Console.Write(enumlen);
            Console.Read();
        }
        public enum myenum
        {
            value1,
            value2
        }
    }
		Ответ 6
Вы можете использовать Enum.GetNames, чтобы возвращать IEnumerable значений в вашем перечислении, а затем. Получить итоговый IEnumerable.
GetNames производит тот же результат, что и GetValues, но быстрее.
Ответ 7
 [Enum].GetNames(typeof(MyEnum)).Length не работал со мной, но
[Enum].GetNames(GetType(Animal_Type)).length сделал.
Ответ 8
Если вы обнаружите, что пишете вышеупомянутое решение так часто, как я, то вы можете реализовать его как общий:
public static int GetEnumEntries<T>() where T : struct, IConvertible 
{
    if (!typeof(T).IsEnum)
        throw new ArgumentException("T must be an enumerated type");
    return Enum.GetNames(typeof(T)).Length;
}
		Ответ 9
Я изучал это только сейчас и не был доволен читабельностью текущего решения. Если вы пишете текст неформально или в небольшом проекте, вы можете просто добавить еще один элемент в конец вашего перечисления под названием "Длина". Таким образом, вам нужно только ввести:
var namesCount = (int)MyEnum.Length;
Конечно, если другие собираются использовать ваш код - или я уверен, что при многих других обстоятельствах, которые не были применимы ко мне в этом случае, это решение может быть от плохого совета до ужасного.