c#中的枚举评估

时间:2009-05-01 19:17:47

标签: c# enums casting

说我有以下枚举(取自MSDN示例):

enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};

我可以在代码中使用如下:

int today = (int)Days.Sun;

问题:

我可以评估枚举吗?假设我有一个变量Day,其值为“Sun”。 Days.Day会评估Days.Sun吗?

谢谢!

请不要挂断日例子并告诉我应该使用比较等...我希望用枚举替换数组的用法,因为它更紧凑。所以我正在寻找的本质上是一种从枚举中检索值的能力,类似于数组:

myArray [Day],其中一天将评估为数组键....

6 个答案:

答案 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
};

(现在,为什么你会以这种方式订购一周的日子超出我的意思......)