Pergunta

Say I têm enumeração da seguinte forma (retirado do MSDN exemplo):

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

Posso, então, o uso está no código da seguinte forma:

int today = (int)Days.Sun;

Pergunta:

Can I avaliar enums? Digamos que eu tenha um Dia variável cujo valor é "Sun". Will Days.Day avaliar a Days.Sun?

Obrigado!

Por favor, não fique pendurado sobre a dias exemplo e dizer-me que eu deveria usar comparação etc ... Eu estou olhando para substituir o uso de matrizes com enums como é mais compacto. Então o que eu estou procurando é essencialmente uma capacidade de recuperar valores de enumeração semelhante a um array:

myArray [dia] em que dia vai avaliar a chave do array ....

Foi útil?

Solução

Am I certo em dizer que você tem:

string day = "Sun";

e você quer receber de volta o valor Days.Sun?

Se assim for, use:

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

Outras dicas

Sim, você pode fazer isso. Você pode livremente lançados entre um enum e seu tipo subjacente.

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

Você também pode analisar os valores de cadeia também. Usando 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);
    }
}

Como diz Andrew, você pode lançar a partir de um enum para seu tipo subjacente. Você também pode unbox entre os dois, bem como, e há uma conversão implícita a partir da constante 0 a qualquer tipo enum:

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

para sim int, mas para seqüência que você deve fazer algo como este

Sim, você pode, você só precisa fornecer o valor inteiro nativo para cada valor enum. A partir do seu exemplo:

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

(Agora, por que você iria pedir dias da semana desta forma está além de mim ...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top