Die Art der bar
ist noch int?
, und es gibt keine implizite Konvertierung von int?
zu int
.
Die Bedingung ändert nicht die Gültigkeit des späteren Codes. Das gleiche gilt für andere Besetzungen:
object x = ...;
if (x is string)
{
string y = x; // This is still invalid
string z = (string) x; // This is fine
}
Der Compiler selten das Ergebnis von einem Stück Code verwendet die Gültigkeit eines anderen zu beeinflussen. Als weiteres Beispiel:
bool condition = ...;
string x;
if (condition)
{
x = "yes";
}
if (!condition)
{
x = "no";
}
Console.WriteLine(x); // Invalid
Die letzte Zeile ist ungültig, weil x
ist noch nicht eindeutig zugewiesen. Wir wissen, dass, was auch immer der Wert von x
, geben wir einen von diesen if
Anweisung Körper ... aber der Compiler versucht nicht, dies herauszufinden.
Obwohl dies dumm scheint, macht es die Sprachregeln wesentlich einfacher.
Ich denke, das beantwortet den Buchstaben der Frage, aber nicht den Geist. Der Grundgedanke der Frage lautet: "Warum wird der Umwandlungsoperator' Nullable' 'explizit' anstatt 'implizit' erklärt? " '' 'Edit:' '' Tatsächlich beantwortet es warum. Mein Fehler. – Medinoc