Mögliche Duplikate:
Nullable-Typen und der ternäre Operator. Warum funktioniert das nicht?
Bedingte Operatorzuweisung mit nullable & lt; Wert & gt; Typen?
Dies wird nicht kompiliert und besagt "Typ des bedingten Ausdrucks kann nicht bestimmt werden, da es keine implizite Konvertierung zwischen 'System.DateTime' und ''"
gibt %Vor%Das funktioniert gut
%Vor% Dies funktioniert nicht, weil der Compiler keine implizite Konvertierung auf beiden Seiten gleichzeitig einfügt, und null
erfordert eine implizite Konvertierung, um ein Nullable-Typ zu werden.
Stattdessen können Sie
schreiben %Vor% Dies erfordert nur eine implizite Konvertierung ( DateTime
bis DateTime?
).
Alternativ können Sie auch die linke Seite verwenden:
%Vor%Dies erfordert auch nur eine implizite Konvertierung.
Der bedingte Operator betrachtet nicht, in was der Wert zurückgegeben wird. Es werden nur die Werte betrachtet, zwischen denen es ausgewählt werden soll: eine DateTime und eine Null. Es kann diese nicht als Instanzen des gleichen Typs identifizieren (da null keine gültige DateTime ist), daher der Fehler. Sie und ich wissen, dass Nullable<DateTime>
den Job erledigen kann, aber der bedingte Operator darf keine "größeren" Typen einführen: Es ist nur erlaubt, die Typen der beiden Ausdrücke zu betrachten, zwischen denen er wählt. (Danke an Aaronaught in Kommentaren zur Klarstellung dieses Punktes und ein schönes klärendes Beispiel.)
Um dies zu umgehen, geben Sie dem Operator einen Hinweis, indem Sie DateTime:
übergeben %Vor%Dies ist ein Duplikat von
NULL-Typen und das ternäre Operator: Warum ist '? 10: null 'verboten?
Meine Antwort auf
Bedingter Operator kann nicht implizit umwandeln?
gibt eine Analyse, die für diese Frage relevant ist.
Ich werde auch im April über ein ähnliches Problem mit dem bedingten Operator bloggen; Sehen Sie sich den Blog für Details an.
Die korrekteste Methode (IMO) besteht darin, dies zu tun
%Vor%Ich benutze den Null-Kollationierungsoperator häufig auf diese Weise.
Dies ist wahrscheinlich der Fehler, den Sie in dieser Situation bekommen:
Fehler CS0173: Art der Bedingung Ausdruck kann nicht bestimmt werden weil es kein implizites gibt Umwandlung zwischen '' und 'int')
Der Compiler erklärt, dass er nicht weiß, wie null
in ein DateTime
konvertiert.
Fix:
Sie müssen cast
explicitly
die expression
angeben, die null
an den Typ nullable
zurückgeben. Das wird funktionieren
Tags und Links .net c# nullable conditional-operator