Warum löst der erste Test einen Compilerfehler aus, während der zweite nicht? Sie erscheinen mir semantisch gleichwertig.Warum sind diese beiden Ausdrücke nicht semantisch gleichwertig?
Antwort
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.
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.
Beide Operanden sollten beim Bedingungsoperator den gleichen Datentyp haben.
- 1. sind diese beiden linq-Ausdrücke funktional gleichwertig?
- 2. Warum verhalten sich diese beiden regulären Ausdrücke nicht gleich?
- 3. Warum sind diese beiden Methoden nicht mehrdeutig? Diese
- 4. Warum sind diese beiden Objekte null?
- 5. Warum sind diese beiden Tasten nicht gleich groß?
- 6. Golang Warum sind diese beiden Saiten nicht gleich?
- 7. Sind diese beiden Methodenaufrufe gleich?
- 8. Warum stimmen diese regulären Ausdrücke nicht überein?
- 9. Warum haben diese beiden Codes Unterschiede?
- 10. Warum geben diese beiden Funktionen nicht den gleichen Wert zurück?
- 11. Warum erzeugen diese beiden Funktionen zwei Ausgabeprozesse?
- 12. Warum haben diese beiden float64s unterschiedliche Werte?
- 13. Warum haben diese beiden Vergleiche unterschiedliche Ergebnisse?
- 14. Warum sind diese Überladungen nicht mehrdeutig?
- 15. Warum sind diese zwei Strings nicht gleich?
- 16. Warum sind diese Seam-Feldwerte nicht bindend?
- 17. Warum sind diese Vektoren nicht gleich?
- 18. Warum sind meine beiden Spalten im IE7 nicht richtig ausgerichtet?
- 19. Sind NULL und Nil gleichwertig?
- 20. Warum sind nicht reguläre Ausdrücke Teil von ISO C99
- 21. Sind diese beiden Kombinatoren bereits in Haskell verfügbar?
- 22. Warum sind diese nul der
- 23. Sind diese beiden Stile der C-Funktion Zeigerdefinition unterschiedlich?
- 24. Warum sind diese Standardparameter so definiert, wie sie sind?
- 25. Warum erzeugen diese beiden ähnlichen Codeteile unterschiedliche Ergebnisse?
- 26. Warum und wie unterscheiden sich diese beiden Nullwerte?
- 27. Warum werden diese regulären Ausdrücke in Java langsam ausgeführt?
- 28. Javascript - Warum sehen diese beiden Bilder anders aus?
- 29. Wie unterscheiden sich diese beiden Guids?
- 30. Kombinieren Sie diese beiden mySQL
Wäre das Äquivalent von expandedTest nicht 'return input? (bool?) Eingabe: null; '? – Fermin
@Fermin: Sie haben Recht, die Logik in den Bedingungen ist invertiert. Ich kopierte den Code aus dem OP. Jetzt behoben. – knittl