Casting-ein Objekt, das null sein könnte
DateTime? testDate = (DateTime?)arrayOfObjects[dateObject];
Bedeutet, dass der code Aussehen, ok? Ich habe versucht, verwenden Sie die as
Betreiber, aber ich habe die 'ungleich null' Fehlers. Was ich versuche zu sagen ist, dass das Objekt ich die Wahl aus dem array ist entweder DateTime
oder eine null DateTime
aber entweder zugeordnet werden können "datumtest".
Nicht richtig fühlen, es zu tun auf diese Weise, ich glaube, ich bin etwas fehlt offensichtlich.
EDIT: ich nehme an, es ist die gleiche wie die Art und Weise konnte ich schon angepasst, die as
in der folgenden Weise:
DateTime? testDate = arrayOfObjects[dateObject] as DateTime?;
Ist entweder Zeile code die beste Art des Umgangs mit möglichen null-Werten?
- Fügen Sie den code, wo arrayOfObjects wird aufgefüllt...
- Es ist das Ergebnis einer SQL-Abfrage. Es ist ein ResultTableCollection.
- Wenn Sie den debugger verwenden, dann könnte man sehen, der Typ, beim Bremsen, nachdem das query-Ergebnis gefüllt oder fügen Sie ein typeoff rufen Sie mit der rechten gibt. Die DB-Treiber benutzt du>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die zweite form wird stillschweigend Ergebnis in
null
wenn das array enthält etwas anderes als ein DateTime-Wert ist. Das scheint ein guter Grund für die Verwendung von das erste.Auf die grundlegende Frage:
Ist es akzeptabel, aber ein wenig dunkel vielleicht, weil es 'versteckt' ein unboxing-Betrieb.
Sie verwenden könnten:
Aber das ist verbose. Und dieses problem eignet sich nicht gut für den bedingten operator (
?:
)Also ich würde stick mit Ihrer ersten version.
DateTime? ist eine kürzere form für ein weiteres struct
Werden Sie nie diese Art von Ihrem DB, sodass die erste Zeile wird nie gegossen, richtig. Die Datenbank wird Ihnen mit einem DateTime-Wert in einem Objekt gespeichert variable. Oder ein null-Wert (nicht typisiert).
DateTime ist eine Struktur, so "as" - operator wird nicht für ihn arbeiten. Also, einfach auf null prüfen Sie wie folgt vor:
Ein besserer Ansatz wäre, etwas zu tun:
oder etwas wie:
DateTime?
ist ein Wert-Typ, wie gut.Versuchen Sie es mit Array.ConvertAll-Methode. Unten sehen Sie ungefähr, wie es implementiert ist:
Hinweis: Dies ist nur eine grobe Idee. Sie können die richtige für Ihre self.