Frage

Sagen sie, ich Enum habe wie folgt (von MSDN Beispiel genommen):

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

Ich kann dann im Code verwenden, wie folgt:

int today = (int)Days.Sun;

Frage:

Kann ich beurteilen Aufzählungen? Sagen, dass ich eine Variable Tag, dessen Wert haben, ist „Sun“. Wird Days.Day zu Days.Sun bewerten?

Danke!

Bitte Warum du am Tag Beispiel nicht aufgehängt und mir sagen, ich soll Vergleich usw. verwenden ... ich suche die Verwendung von Arrays mit Aufzählungen zu ersetzen, wie es kompakter ist. Also, was ich suche ist im Wesentlichen eine Möglichkeit, Werte von Aufzählungs abzurufen ähnlich einem Array:

myArray [Tag], wo Tag Array-Schlüssel auswertet ....

War es hilfreich?

Lösung

Bin ich zu Recht sagen, du hast:

string day = "Sun";

und Sie wollen den Wert Days.Sun zurück zu bekommen?

Wenn ja, verwenden:

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

Andere Tipps

Ja, Sie können das tun. Sie können zwischen einem enum und die ihr zugrunde liegenden Typ frei gegossen.

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

Sie können auch als auch die String-Werte analysieren. Mit 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);
    }
}

Wie Andrew sagt, können Sie von einem Enum zu dem zugrunde liegenden Typ umgewandelt. Sie können unbox auch zwischen den beiden als gut, und es gibt eine implizite Konvertierung von der Konstante 0 in jedem Enum-Typ:

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

für int ja, aber für String sollten Sie so etwas wie diese

Ja, Sie können, müssen Sie nur die native Integer-Wert für jeden Enum-Wert liefern. Von Ihrem Beispiel:

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

(Nun, warum sollten Sie Tage der Woche auf diese Weise bestellen ist mir schleierhaft ...)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top