열거 형을 반복 C #? (System.Array 인덱싱) [c#]


Answers

배열을 형 변환 할 필요가 있습니다. 반환 된 배열은 실제로 typeof(myEnum) 요청하면 요청 된 유형, 즉 myEnum[] 같습니다.

myEnum[] values = (myEnum[]) Enum.GetValues(typeof(myEnum));

그런 다음 values[0]

Question

다음 코드가 있습니다.

// Obtain the string names of all the elements within myEnum 
String[] names = Enum.GetNames( typeof( myEnum ) );

// Obtain the values of all the elements within myEnum 
Array values = Enum.GetValues( typeof( myEnum ) );

// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
    print( names[i], values[i] ); 
}

그러나 값을 인덱싱 할 수 없습니다. 이 작업을 수행하는 더 쉬운 방법이 있습니까?

아니면 전 완전히 무언가를 놓쳤습니다!




사전 목록은 어때?

Dictionary<string, int> list = new Dictionary<string, int>();
foreach( var item in Enum.GetNames(typeof(MyEnum)) )
{
    list.Add(item, (int)Enum.Parse(typeof(MyEnum), item));
}

물론 사전 값 형식을 열거 형 값이 무엇이든 변경할 수 있습니다.




흥미로운 가능성을 가진 또 다른 솔루션 :

enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

static class Helpers
{
public static IEnumerable<Days> AllDays(Days First)
{
  if (First == Days.Monday)
  {
     yield return Days.Monday;
     yield return Days.Tuesday;
     yield return Days.Wednesday;
     yield return Days.Thursday;
     yield return Days.Friday;
     yield return Days.Saturday;
     yield return Days.Sunday;
  } 

  if (First == Days.Saturday)
  {
     yield return Days.Saturday;
     yield return Days.Sunday;
     yield return Days.Monday;
     yield return Days.Tuesday;
     yield return Days.Wednesday;
     yield return Days.Thursday;
     yield return Days.Friday;
  } 
}



이전 질문이지만 LINQ의 .Cast<>() 사용하여 약간 더 깨끗한 접근법

var values = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>();

foreach(var val in values)
{
    Console.WriteLine("Member: {0}",val.ToString());     
}



형식 문자열을 사용하여이 작업을 단순화 할 수 있습니다. 사용 메시지에서 다음 스 니펫을 사용합니다.

writer.WriteLine("Exit codes are a combination of the following:");
foreach (ExitCodes value in Enum.GetValues(typeof(ExitCodes)))
{
    writer.WriteLine("   {0,4:D}: {0:G}", value);
}

D 형식 지정자는 열거 형 값의 소수점 이하 자릿수를 지정합니다. 또한 16 진수 출력을 제공하는 X 지정자가 있습니다.

G 지정자는 열거 형 형식을 지정합니다. Flags 특성이 enum에 적용되면 결합 된 값도 지원됩니다. Flags가 항상 존재하는 것처럼 작동하는 F 지정자가 있습니다.

Enum.Format ()를 참조하십시오.




다음은 사용자 정의 Enum 객체를 반복하는 간단한 방법입니다

For Each enumValue As Integer In [Enum].GetValues(GetType(MyEnum))

     Print([Enum].GetName(GetType(MyEnum), enumValue).ToString)

Next