열거 형이 있습니다.
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");