Warum findet der ternäre Operator den Gusstyp nicht in Abhängigkeit vom gesuchten Wert?

8

Eine Frage hier hat eine Frage für mich aufgeworfen:

Ternäre Operationen in c #, sagen wir x = y ? a : b , verwenden den Typ von a oder b , um den Typ des ternären Ausdrucks zu bestimmen. Warum verwendet es nicht den Typ von x ? Gibt es in keiner Situation einen erwarteten Rückgabetyp, den er verwenden kann?

EDIT: Aus Gründen der Klarheit, wenn ich sage

  

Warum verwendet es nicht den Typ von x ?

Ich nehme an, ich meine

  

Warum versucht es nicht zuerst, den Typ von x zu verwenden?

Wie die Dokumentation besagt:

  • Wenn X und Y vom selben Typ sind, dann ist dies der Typ von bedingter Ausdruck.
  • Andernfalls, wenn eine implizite Umwandlung (Abschnitt 6.1) existiert von X nach Y, aber nicht von Y nach X, dann ist Y der Typ des Bedingungsausdrucks.
  • Andernfalls, wenn eine implizite Konvertierung (Abschnitt 6.1) existiert von Y nach X, aber nicht von X nach Y, dann ist X der Typ des bedingten Ausdrucks.
  • Ansonsten kann kein Ausdruckstyp bestimmt werden, und ein Fehler bei der Kompilierung tritt auf.

Könnte dieser Prozess mit beginnen:

  • Wenn der Auflösungstyp eindeutig ist, dann ist es der Typ des bedingten Ausdrucks.
MirroredFate 12.09.2013, 22:27
quelle

1 Antwort

9
  

"Gibt es in keiner Situation einen erwarteten Rückgabetyp?   kann verwenden? "

Nein. Betrachten Sie zum Beispiel:

%Vor%

Es gibt mehrere Überladungen der Methode ToString , die unterschiedliche Datentypen verwenden. Der Compiler muss wissen, welcher Typ des Ausdrucks bekannt ist, welche Überladung zu verwenden ist.

    
Guffa 12.09.2013, 22:42
quelle

Tags und Links