[C#] 열거 형에 정의 된 총 항목 수

열거 형에 정의 된 항목 수를 어떻게 얻을 수 있습니까?



답변

Enum.GetNames열거 형에있는 모든 항목의 이름을 나타내는 배열을 반환하는 정적 메서드 를 사용할 수 있습니다 . 이 배열의 길이 속성은 열거 형에 정의 된 항목 수와 같습니다.

var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;


답변

질문은 ~이야:

열거 형에 정의 된 항목 수를 어떻게 얻을 수 있습니까?

“항목”의 수는 실제로 완전히 다른 두 가지를 의미 할 수 있습니다. 다음 예를 고려하십시오.

enum MyEnum
{
    A = 1,
    B = 2,
    C = 1,
    D = 3,
    E = 2
}

에 정의 된 “항목”의 수는 무엇입니까 MyEnum?

항목 수는 5입니까? ( A, B, C, D, E)

아니면 3입니까? ( 1, 2, 3)

(5) 에서 정의 된 이름 의 수는 MyEnum다음과 같이 계산 될 수 있습니다.

var namesCount = Enum.GetNames(typeof(MyEnum)).Length;

(3) 에서 정의 된 의 수는 MyEnum다음과 같이 계산 될 수있다.

var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();


답변

Enum.GetValues (typeof (MyEnum)). 길이;


답변

이 질문에 대한 C 답변에서 본 멋진 트릭은 열거 형에 마지막 요소를 추가하고 열거 형에 몇 개의 요소가 있는지 알려주는 데 사용합니다.

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

0 이외의 시작 값을 정의하는 경우 NumberOfTypes-Type1을 사용하여 요소 수를 확인할 수 있습니다.

Enum을 사용하는 것보다이 방법이 더 빠를 지 확신 할 수 없으며, Enum이이 정보를 확인해야하기 때문에이 방법이 올바른 방법으로 간주되는지 확실하지 않습니다.


답변

이전 답변에서 코드 샘플 추가.

 class Program
    {
        static void Main(string[] args)
        {
            int enumlen = Enum.GetNames(typeof(myenum)).Length;
            Console.Write(enumlen);
            Console.Read();
        }
        public enum myenum
        {
            value1,
            value2
        }
    }


답변

Enum.GetNames를 사용하여 열거 형에 IEnumerable 값을 반환 한 다음 결과 IEnumerable을 계산할 수 있습니다.

GetNames는 GetValues와 거의 동일한 결과를 생성하지만 더 빠릅니다.


답변

위와 같은 솔루션을 자주 작성하는 경우 일반적인 방법으로 구현할 수 있습니다.

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;
}