Domanda

Dire che ho enum come segue (preso dall'esempio MSDN):

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

Posso quindi usare è nel codice come segue:

int today = (int)Days.Sun;

Domanda:

Posso valutare gli enum? Supponiamo di avere un giorno variabile il cui valore è "sole". Days.Day valuterà Days.Sun?

Grazie!

Per favore, non rimanere bloccato nell'esempio dei giorni e dimmi che dovrei usare il confronto, ecc ... Sto cercando di sostituire l'uso degli array con gli enum poiché è più compatto. Quindi quello che sto cercando è essenzialmente la capacità di recuperare valori dall'enum simile a un array:

myArray [Giorno] in cui il giorno valuterà la chiave dell'array ....

È stato utile?

Soluzione

Ho ragione nel dire che hai:

string day = "Sun";

e vuoi recuperare il valore Days.Sun ?

In tal caso, utilizzare:

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

Altri suggerimenti

Sì, puoi farlo. Puoi scegliere liberamente tra un enum e il suo tipo sottostante.

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

Puoi anche analizzare i valori delle stringhe. Utilizzando 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);
    }
}

Come dice Andrew, puoi lanciare da un enum al suo tipo sottostante. Puoi anche decomprimere tra i due e c'è una conversione implicita dalla costante 0 in qualsiasi tipo di 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);
    }
}

per int sì, ma per stringa dovresti fare qualcosa come questo

Sì, puoi solo fornire il valore intero nativo per ciascun valore enum. Dal tuo esempio:

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

(Ora, perché ordineresti giorni della settimana in questo modo è oltre me ...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top