2016-04-27 15 views

Antwort

9

Der Bedingungsoperator erfordert, dass beide Operanden vom gleichen Typ sind. null und bool sind nicht kompatibel, und es gibt keine automatische Umwandlung von bool zu null. Sie müssen explizit werfen:

return input ? (bool?)input : null; 

Auf der anderen Seite gibt es eine automatische Konvertierung von bool zu bool? und auch von null zu bool?, das ist, warum Sie ein bool und null von einem bool? Verfahren zurückkehren können.

+0

Wäre das Äquivalent von expandedTest nicht 'return input? (bool?) Eingabe: null; '? – Fermin

+0

@Fermin: Sie haben Recht, die Logik in den Bedingungen ist invertiert. Ich kopierte den Code aus dem OP. Jetzt behoben. – knittl

4

Die Typinferenz Regeln besagen, dass:

Entweder ist die Art von first_expression und second_expression muss die gleich sein, oder eine implizite Konvertierung von einem Typ zum anderen existieren.

So kann der Compiler den Typ bool? ableiten.

Diese Art Rückschluss tritt nicht in einer if-Anweisung auf, daher ist es Ihre Aufgabe, die Typen explizit anzugeben.

1

Beide Operanden sollten beim Bedingungsoperator den gleichen Datentyp haben.

Verwandte Themen