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 ....
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 ...)