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

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

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

int today = (int)Days.Sun;

问题:

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

谢谢!

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

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

有帮助吗?

解决方案

我说得对,我是对的:

string day = "Sun";

并且您想要取回值 Days.Sun

如果是,请使用:

string day = "Sun";
Day day = (Day) Enum.Parse(typeof(Days), day);

其他提示

是的,你可以这样做。您可以在 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 };

您也可以解析字符串值。使用 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);
    }
}

正如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);
    }
}

for int yes,但是对于字符串,你应该做一些像这个

是的,你只需要为每个枚举值提供原生整数值。从你的例子:

enum Days {
    Sat=1, 
    Sun=2, 
    Mon=3, 
    Tue=4, 
    Wed=5, 
    Thu=6, 
    Fri=7
};

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top