답변:
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();
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 MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
0 이외의 시작 값을 정의하는 경우 NumberOfTypes-Type1을 사용하여 요소 수를 확인할 수 있습니다.
Enum을 사용하는 것보다이 방법이 더 빠를 지 확신 할 수 없으며, Enum이이 정보를 확인해야하기 때문에이 방법이 올바른 방법으로 간주되는지 확실하지 않습니다.
나는 지금 이것을 조사하고 있었고 현재 솔루션의 가독성에 만족하지 않았습니다. 비공식적으로 또는 소규모 프로젝트에서 코드를 작성하는 경우 "Length"라는 열거 형 끝에 다른 항목을 추가 할 수 있습니다. 이런 식으로 다음을 입력하기 만하면됩니다.
var namesCount = (int)MyEnum.Length;
물론 다른 사람들이 귀하의 코드를 사용하려는 경우-또는이 경우 나에게 적용되지 않은 다른 많은 상황에서 확신 할 경우이 솔루션은 잘못된 조언에서 끔찍한 곳까지있을 수 있습니다.