在Enum中搜索字符串并返回Enum

Mat*_*son 148 c# string enumeration

我有一个枚举:

public enum MyColours
{
    Red,
    Green,
    Blue,
    Yellow,
    Fuchsia,
    Aqua,
    Orange
}
Run Code Online (Sandbox Code Playgroud)

我有一个字符串:

string colour = "Red";
Run Code Online (Sandbox Code Playgroud)

我希望能够回归:

MyColours.Red
Run Code Online (Sandbox Code Playgroud)

从:

public MyColours GetColour(string colour)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有:

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?
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我有点卡住了.无论如何都要按值选择枚举器.就像是:

MyColour(2) 
Run Code Online (Sandbox Code Playgroud)

会导致

MyColour.Green
Run Code Online (Sandbox Code Playgroud)

JMa*_*sch 360

看看System.Enum.Parse:


enum Colors {Red, Green, Blue}

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

  • 不要忘记你可以通过将第三个可选参数传递为"true"来忽略区分大小写 (65认同)
  • @ user1531040实际上,有一个Enum.TryParse. (11认同)

Guv*_*nte 18

您可以将int强制转换为枚举

(MyColour)2
Run Code Online (Sandbox Code Playgroud)

还有Enum.Parse的选项

(MyColour)Enum.Parse(typeof(MyColour), "Red")
Run Code Online (Sandbox Code Playgroud)


Rom*_*man 11

鉴于.NET(+ Core)和C#7的最新和最大变化,这是最好的解决方案:

var ignoreCase = true;
Enum.TryParse("red", ignoreCase , out MyColours colour);
Run Code Online (Sandbox Code Playgroud)

color变量可以在Enum.TryParse的范围内使用


Bru*_*ant 5

您需要的只是Enum.Parse