/ / Was konvertiert eine implizite Enumeration-Konvertierung? [duplizieren] - c #

Was konvertiert eine implizite Enumerationskonvertierung? [duplizieren] - c #

Aus der C # 5.0-Spezifikation

6.1.3 Implizite Enumerationskonvertierungen

Eine implizite Enumeration-Konvertierung ist zulässig das Dezimal-Ganzzahl-Literal 0 zu einem beliebigen Typ und zu konvertieren irgendeinnullable-type, dessen zugrunde liegender Typ ein Aufzählungstyp ist. In Letzterem In diesem Fall wird die Konvertierung durch Konvertierung in den Basiswert bewertet Aufzählungstyp und Umbruch des Ergebnisses (§4.1.10).

Bedeutet "das Dezimalzahl-Ganzzahl-Literal 0" den Ganzzahlwert 0?

Wenn ja, warum lässt eine implizite Enumeration-Konvertierung nicht zu, dass andere Ganzzahlwerte wie 1, 2, 3, ... in einen beliebigen Enummentyp konvertiert werden?

Vielen Dank.

Antworten:

-1 für die Antwort № 1

Ja, es bedeutet das wörtliche 0. Beispielsweise:

static void Main()
{
Method(0);
}

static void Method(DayOfWeek dow)
{
Console.WriteLine(dow);
}

sollte drucken Sunday zur Konsole. Wenn Sie sich ändern 0 in 1, das Programm ist ungültig (Fehler beim Kompilieren).

Nur die (Kompilierzeitkonstante) Null hat eine implizit Umwandlung in den Aufzählungstyp. Für andere Werte benötigen Sie eine explizit statt wie gegossen Method((DayOfWeek)1);.

Bearbeiten: Dies erklärt, wie die Regeln sind. Wenn du wissen willst Warum Sie haben diese Regeln gewählt. Ich empfehle die Links in den Kommentaren (zu Ihrer Frage oben) von Damien_The_Unbeliever und CodeCaster.