Pregunta

Diga que tengo la enumeración de la siguiente manera (tomada del ejemplo de MSDN):

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

Luego puedo usar el código de la siguiente manera:

int today = (int)Days.Sun;

Pregunta:

¿Puedo evaluar enumeraciones? Digamos que tengo una variable Día cuyo valor es " Sol " ;. ¿Days.Day evaluará a Days.Sun?

¡Gracias!

Por favor, no se obsesione con el ejemplo de los días y dígame que debería usar la comparación, etc. Estoy buscando reemplazar el uso de matrices por enumerados, ya que es más compacto. Entonces, lo que busco es esencialmente la capacidad de recuperar valores de enumeración similares a una matriz:

myArray [Día] donde el día se evaluará a una clave de matriz ....

¿Fue útil?

Solución

Estoy en lo cierto al decir que tienes:

string day = "Sun";

y desea recuperar el valor Days.Sun ?

Si es así, usa:

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

Otros consejos

Sí, puedes hacer eso. Puede realizar conversiones libremente entre un enum y su tipo subyacente.

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

También puede analizar los valores de cadena también. Utilizando 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 dice Andrew, puedes convertir desde una enumeración a su tipo subyacente. También puede desempaquetar entre los dos también, y hay una conversión implícita de la constante 0 a cualquier tipo de enumeración:

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 int sí, pero para string debería hacer algo como this

Sí, puede, solo debe proporcionar el valor entero nativo para cada valor de enumeración. De tu ejemplo:

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

(Ahora, ¿por qué ordenaría los días de la semana de esta manera?)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top