[C#] Enum에서 문자열을 검색하고 Enum을 반환

열거 형이 있습니다.

public enum MyColours
{
    Red,
    Green,
    Blue,
    Yellow,
    Fuchsia,
    Aqua,
    Orange
}

그리고 나는 문자열이 있습니다 :

string colour = "Red";

돌아올 수 있기를 원합니다.

MyColours.Red

에서:

public MyColours GetColour(string colour)

지금까지 나는 가지고있다 :

public MyColours GetColours(string colour)
{
    string[] colours = Enum.GetNames(typeof(MyColours));
    int[]    values  = Enum.GetValues(typeof(MyColours));
    int i;
    for(int i = 0; i < colours.Length; i++)
    {
        if(colour.Equals(colours[i], StringComparison.Ordinal)
            break;
    }
    int value = values[i];
    // I know all the information about the matched enumeration
    // but how do i convert this information into returning a
    // MyColour enumeration?
}

보시다시피, 나는 조금 붙어 있습니다. 어쨌든 값으로 열거자를 선택할 수 있습니까? 다음과 같은 것 :

MyColour(2) 

결과

MyColour.Green



답변

System.Enum.Parse를 확인하십시오.


enum Colors {Red, Green, Blue}

// your code:
Colors color = (Colors)System.Enum.Parse(typeof(Colors), "Green");


답변

int를 열거 형으로 캐스팅 할 수 있습니다

(MyColour)2

Enum.Parse 옵션도 있습니다.

(MyColour)Enum.Parse(typeof(MyColour), "Red")


답변

.NET (+ Core) 및 C # 7에 대한 최신 변경 사항을 감안할 때 가장 좋은 솔루션은 다음과 같습니다.

var ignoreCase = true;
Enum.TryParse("red", ignoreCase , out MyColours colour);

색상 변수는 Enum의 범위 내에서 사용할 수 있습니다.


답변

당신이 필요하다 Enum.Parse .


답변

OregonGhost의 답변 +1을 표시 한 다음 반복을 사용하려고 시도했지만 Enum.GetNames가 문자열을 반환하기 때문에 그것이 옳지 않다는 것을 깨달았습니다. Enum.GetValues를 원합니다.

public MyColours GetColours(string colour)
{
   foreach (MyColours mc in Enum.GetValues(typeof(MyColours)))
   if (mc.ToString() == surveySystem)
      return mc;

   return MyColors.Default;
}


답변

Enum.Parse이름에서 열거 형 값을 얻는 데 사용할 수 있습니다 . 를 사용하여 모든 값을 반복 Enum.GetNames할 수 있으며 int를 열거 형으로 캐스팅하여 int 값에서 열거 형 값을 가져올 수 있습니다.

예를 들면 다음과 같습니다.

public MyColours GetColours(string colour)
{
    foreach (MyColours mc in Enum.GetNames(typeof(MyColours))) {
        if (mc.ToString().Contains(colour)) {
            return mc;
        }
    }
    return MyColours.Red; // Default value
}

또는:

public MyColours GetColours(string colour)
{
    return (MyColours)Enum.Parse(typeof(MyColours), colour, true); // true = ignoreCase
}

후자는 값을 찾을 수 없으면 ArgumentException을 발생 시키며, 함수 내에서이를 잡아서 기본값을 리턴 할 수 있습니다.


답변

var color =  Enum.Parse<Colors>("Green");