Оценка enum в c # - PullRequest
       27

Оценка enum в c #

1 голос
/ 01 мая 2009

Скажите, что у меня есть enum следующим образом (взято из примера 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 ]

8 голосов
/ 01 мая 2009

Прав ли я, говоря, что у вас есть:

string day = "Sun";

и вы хотите вернуть значение Days.Sun?

Если это так, используйте:

string day = "Sun";
Day day = (Day) Enum.Parse(typeof(Days), day);
3 голосов
/ 01 мая 2009

Да, вы можете сделать это. Вы можете свободно разыгрывать между 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 };
1 голос
/ 01 мая 2009

Как говорит Эндрю, вы можете привести из перечисления к его базовому типу. Вы также можете распаковать между ними, и есть неявное преобразование из константы 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);
    }
}
1 голос
/ 01 мая 2009

Вы также можете анализировать строковые значения. Использование 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);
    }
}
0 голосов
/ 01 мая 2009

Да, вы можете, вам просто нужно предоставить собственное целочисленное значение для каждого значения перечисления. Из вашего примера:

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

(Теперь, почему вы заказываете дни недели таким образом, я не знаю ...)

0 голосов
/ 01 мая 2009

для int да, но для строки вы должны сделать что-то вроде this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...