열거형에 정의된 총 항목 수
열거형에 정의된 항목 수를 가져오려면 어떻게 해야 합니까?
열거형에 있는 모든 항목의 이름을 나타내는 배열을 반환하는 정적 메서드를 사용할 수 있습니다.이 배열의 길이 속성은 열거형에 정의된 항목 수와 같습니다.
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
'programing' 카테고리의 다른 글
iOS를 사용하여 GUID/UUID를 생성하는 방법 (0) | 2023.05.11 |
---|---|
NLog를 사용하여 ${basedir}는 어디에 있습니까? (0) | 2023.05.11 |
log4Net에 추적 수준이 없는 이유는 무엇입니까? (0) | 2023.05.11 |
npm install - gless가 작동하지 않음: EACCES: 권한이 거부됨 (0) | 2023.05.11 |
입력 파일이 텍스트 형식 덤프인 것 같습니다.psql을 사용하십시오. (0) | 2023.05.11 |