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");
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的范围内使用
归档时间: |
|
查看次数: |
109771 次 |
最近记录: |