programing

열거형에 정의된 총 항목 수

muds 2023. 5. 11. 21:57
반응형

열거형에 정의된 총 항목 수

열거형에 정의된 항목 수를 가져오려면 어떻게 해야 합니까?

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

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)

에서 정의된 이름MyEnum다음과 같이 계산할 수 있습니다.

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

에서 정의된 의 수MyEnum다음과 같이 계산할 수 있습니다.

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

Enum.GetValues((MyEnum) 유형)입니다.길이;

저는 오늘 벤치마크를 실행했고 흥미로운 결과를 얻었습니다.이 세 가지 중에서:

var count1 = typeof(TestEnum).GetFields().Length;
var count2 = Enum.GetNames(typeof(TestEnum)).Length;
var count3 = Enum.GetValues(typeof(TestEnum)).Length;

이름 가져오기(enum)가 가장 빠릅니다!

|         Method |      Mean |    Error |   StdDev |
|--------------- |---------- |--------- |--------- |
| DeclaredFields |  94.12 ns | 0.878 ns | 0.778 ns |
|       GetNames |  47.15 ns | 0.554 ns | 0.491 ns |
|      GetValues | 671.30 ns | 5.667 ns | 4.732 ns |

이 질문에 대한 C의 답변에서 본 멋진 속임수입니다. 마지막 요소를 열거에 추가하고 이를 사용하여 열거에 몇 개의 요소가 있는지 알려주십시오.

enum MyType {
  Type1,
  Type2,
  Type3,
  NumberOfTypes
}

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

이 방법이 Enum을 사용하는 것보다 빠를지 확신할 수 없으며, 이 정보를 확인할 수 있는 Enum이 있기 때문에 이 방법이 적절한 방법으로 간주될지도 모르겠습니다.

사용할 수 있습니다.Enum.GetNames돌려주다IEnumerable열거형 값의 값을 입력합니다. Count결과적으로 산출된 IE 숫자.

GetNames와 거의 같은 결과를 낳습니다.GetValues하지만 더 빠릅니다.

이전 답변에서 코드 샘플을 추가하는 것입니다.

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

위의 솔루션을 저만큼 자주 작성하는 경우 일반적으로 구현할 수 있습니다.

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

Visual Basic의 경우:

[Enum].GetNames(typeof(MyEnum)).Length저와 함께 일하지는 않았지만,[Enum].GetNames(GetType(Animal_Type)).length했다.

저는 방금 이 문제를 조사하고 있었는데, 현재 솔루션의 가독성에 만족하지 못했습니다.비공식적으로 또는 작은 프로젝트에서 코드를 작성하는 경우 "길이"라는 항목을 열거형 끝에 추가하면 됩니다.이 방법에서는 다음을 입력하기만 하면 됩니다.

var namesCount = (int)MyEnum.Length;

물론 다른 사람들이 당신의 코드를 사용할 것이라면 - 또는 이 경우에 저에게 적용되지 않은 다른 많은 상황에서 - 이 해결책은 잘못된 조언에서 끔찍한 것일 수 있습니다.

언급URL : https://stackoverflow.com/questions/856154/total-number-of-items-defined-in-an-enum

반응형