Question

Dites que j'ai l'énumération suivante (extraite de l'exemple MSDN):

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

Je peux alors utiliser le code dans le code suivant:

int today = (int)Days.Sun;

Question:

Puis-je évaluer des enums? Supposons que je possède une variable Day dont la valeur est "Sun". Days.Day sera-t-il évalué en Days.Sun?

Merci!

S'il vous plaît, ne vous attardez pas sur l'exemple de la journée et ne me dites pas que je devrais utiliser une comparaison, etc. Donc, ce que je recherche, c’est essentiellement une capacité à récupérer des valeurs d’enum similaires à un tableau:

myArray [Day] où le jour sera évalué comme clé de tableau ....

Était-ce utile?

La solution

Ai-je raison de dire que vous avez:

string day = "Sun";

et vous souhaitez récupérer la valeur Days.Sun ?

Si oui, utilisez:

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

Autres conseils

Oui, vous pouvez le faire. Vous pouvez librement convertir un enum et son type sous-jacent.

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

Vous pouvez également analyser les valeurs de chaîne. Utilisation de 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);
    }
}

Comme Andrew le dit, vous pouvez convertir une enum en son type sous-jacent. Vous pouvez également décompresser entre les deux et effectuer une conversion implicite de la constante 0 en un type quelconque:

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

pour int oui, mais pour chaîne vous devriez faire quelque chose comme ceci

Oui, vous devez simplement fournir la valeur entière native pour chaque valeur enum. De votre exemple:

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

(Maintenant, pourquoi commander les jours de la semaine de cette façon me dépasse ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top