Nullable Typ Problem mit?: Bedingter Operator
Könnte mir jemand erklären, warum das funktioniert C#.NET 2.0:
Nullable<DateTime> foo;
if (true)
foo = null;
else
foo = new DateTime(0);
...aber das heißt nicht:
Nullable<DateTime> foo;
foo = true ? null : new DateTime(0);
Letztere form gibt mir ein compile error "- Typ des bedingten Ausdrucks kann nicht bestimmt werden, denn es gibt keine implizite Konvertierung zwischen "<null> " und " System.DateTime'."
Nicht, dass ich nicht die erste, aber der zweite Stil ist mehr im Einklang mit dem rest von meinem code.
InformationsquelleAutor der Frage Nick Gotch | 2008-11-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Frage wurde gebeten, ein paar mal schon. Der compiler sagt Ihnen, dass Sie nicht wissen, wie konvertieren
null
in eineDateTime
.Die Lösung ist einfach:
Beachten Sie, dass
Nullable<DateTime>
geschrieben werden könnenDateTime?
dann sparen Sie einen Haufen Tipparbeit.InformationsquelleAutor der Antwort Stewart Johnson
FYI (Offtopic, aber raffinierte und mit nullable-Typen) haben wir ein handliches Betreiber nur für nullable-Typen genannt, die die null-coalescing operator
Wie folgt verwendet:
InformationsquelleAutor der Antwort
Ist es, weil in einem ternären operator, der zwei Werte lösen muss, um die selbe Art.
InformationsquelleAutor der Antwort MojoFilter
Andere Lösung ähnlich dem angenommen wird, ist der Einsatz von C#'s
default
Schlüsselwort. Während definiert die Verwendung von Generika, es ist tatsächlich für jeden Typ.Beispiel-Anwendung angewendet, um die OP ' s Frage:
Beispiel für die Verwendung mit den aktuellen akzeptierten Antworten:
Auch mit Hilfe
default
Sie nicht brauchen, um geben Sie die variable wienullable
damit weisen Sie einenull
Wert. Der compiler wird automatisch zuweisen, die bestimmten Variablen-Typ Standard-Wert und es wird kein Fehler aufgetreten. Beispiel:InformationsquelleAutor der Antwort newfurniturey
Ich weiß, diese Frage wurde in 2008 und es ist jetzt 5 Jahre später, aber die Antwort markiert, da eine Antwort nicht befriedigen, mich. Die richtige Antwort ist, dass DateTime ist eine Struktur, als eine Struktur, die es nicht kompatibel ist mit null. Sie haben zwei Möglichkeiten der Lösung:
Erste ist null kompatibel mit DateTime (zum Beispiel cast null auf DateTime? als der Herr mit 70 upvotes schon sagt, gegossen oder null-Objekt oder ValueType).
Das zweite ist, um die DateTime-kompatibel mit null (zum Beispiel, gegossen, DateTime, DateTime?).
InformationsquelleAutor der Antwort Mishax