Typ des bedingten Ausdrucks kann nicht bestimmt werden, denn es gibt keine implizite Konvertierung zwischen " int " und " <null>
Warum wird das nicht kompilieren?
int? number = true ? 5 : null;
Typ des bedingten Ausdrucks kann nicht bestimmt werden, denn es gibt keine implizite Konvertierung zwischen " int " und " <null>
InformationsquelleAutor der Frage davidhq | 2013-08-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spec (§7.14) sagt, dass für einen bedingten Ausdruck
b ? x : y
gibt es drei Möglichkeiten, entwederx
undy
beide haben eine Art und bestimmte gute Bedingungen erfüllt sind, nur eine vonx
undy
hat eine Art und bestimmte gute Bedingungen erfüllt sind, oder während der Kompilierung ein Fehler Auftritt. Hier, "bestimmte gute Bedingungen" bedeutet, dass bestimmte Konvertierungen sind möglich, die wir in die details unten.Nun, wenden wir uns nun der germane Teil der spec:
Das Problem hier ist, dass in
nur einer der bedingten Ergebnisse hat einen Typ. Hier
x
ist einint
wörtlich, undy
istnull
die nicht nicht haben eine Art undnull
ist nicht implizit Cabrio zu einerint
1. Also, die "gewisse gute Voraussetzungen" nicht erfüllt, und eine compile-time Fehler tritt auf.Dort sind zwei Möglichkeiten das zu umgehen:
Hier sind wir noch in dem Fall, wo nur eine
x
undy
hat einen Typ. Beachten Sie, dassnull
noch nicht eine Art noch der compiler nicht irgendein problem haben, weil(int?)5
undnull
sind sowohl implizit als Cabrio zuint?
(§6.1.4 und §6.1.5).Die andere Möglichkeit ist natürlich:
aber jetzt haben wir gelesen verschiedenen - Klausel in der spec zu verstehen, warum dies so okay ist:
Hier
x
ist der Typint
undy
ist der Typint?
. Es gibt keine implizite Konvertierung vonint?
zuint
aber es ist eine implizite Konvertierung vonint
zuint?
so der Typ des Ausdrucks istint?
.1: Beachten Sie weiters, dass der Typ der linken Seite ignoriert wird bei der Bestimmung der Art des bedingten Ausdrucks, eine gemeinsame Quelle der Verwirrung hier.
InformationsquelleAutor der Antwort jason
null
keine persönlichen Typ - es braucht nur einen kleinen Stups, um es glücklich:InformationsquelleAutor der Antwort Marc Gravell