说我有以下枚举(取自MSDN示例):
enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
我可以在代码中使用如下:
int today = (int)Days.Sun;
问题:
我可以评估枚举吗?假设我有一个变量Day,其值为“Sun”。 Days.Day会评估Days.Sun吗?
谢谢!
请不要挂断日例子并告诉我应该使用比较等...我希望用枚举替换数组的用法,因为它更紧凑。所以我正在寻找的本质上是一种从枚举中检索值的能力,类似于数组:
myArray [Day],其中一天将评估为数组键....
答案 0 :(得分:8)
我说得对,我是对的:
string day = "Sun";
并且您想要取回值Days.Sun
?
如果是,请使用:
string day = "Sun";
Day day = (Day) Enum.Parse(typeof(Days), day);
答案 1 :(得分:3)
是的,你可以这样做。您可以在enum
及其基础类型之间自由转换。
using System;
class Program
{
static void Main()
{
// prints "zero"
Console.WriteLine((Foo)0);
// prints "1"
Console.WriteLine((int)Foo.one);
}
}
enum Foo { zero, one, two };
答案 2 :(得分:1)
您也可以解析字符串值。使用Enum.Parse
[TestFixture]
public class EnumParsingSO
{
public enum Days
{
Sat = 1,
Sun,
Mon,
Tues
}
[Test]
public void EnumFromString()
{
Days expected = Days.Mon;
int expectedInt = 3;
Days actual = (Days)Enum.Parse(typeof(Days), "Mon");
Assert.AreEqual(expected, actual);
Assert.AreEqual(expectedInt, (int)actual);
}
}
答案 3 :(得分:1)
正如Andrew所说,你可以从枚举转换为其基础类型。您也可以在两者之间进行拆箱,并且存在从常量0到任何枚举类型的隐式转换:
using System;
enum Demo { Foo, Bar, Baz };
class Test
{
static void Main()
{
int i = 2;
object o = i;
// Unboxing from int to Demo
Demo d = (Demo) o;
Console.WriteLine(d);
o = Demo.Baz;
// Unboxing from Demo to int
i = (int) o;
Console.WriteLine(i);
// Implicit conversion of 0
d = 0;
Console.WriteLine(d);
}
}
答案 4 :(得分:0)
对于int是,但对于字符串,您应该执行this
之类的操作答案 5 :(得分:0)
是的,你只需要为每个枚举值提供原生整数值。从你的例子:
enum Days {
Sat=1,
Sun=2,
Mon=3,
Tue=4,
Wed=5,
Thu=6,
Fri=7
};
(现在,为什么你会以这种方式订购一周的日子超出我的意思......)