열거 형에 정의 된 항목 수를 어떻게 얻을 수 있습니까?
답변
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;
}