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