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 № 1Ja, 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.