Das Objekt mit dem Wert "null" braucht einen Wert
Es ist paradox-in der Ausnahme Beschreibung:
Nullable Objekt muss einen Wert haben (?!)
Dies ist das problem:
Ich habe eine DateTimeExtended
Klasse,
das hat
{
DateTime? MyDataTime;
int? otherdata;
}
und einen Konstruktor
DateTimeExtended(DateTimeExtended myNewDT)
{
this.MyDateTime = myNewDT.MyDateTime.Value;
this.otherdata = myNewDT.otherdata;
}
dieser code ausgeführt
DateTimeExtended res = new DateTimeExtended(oldDTE);
wirft ein InvalidOperationException
mit der Meldung:
Nullable Objekt muss einen Wert haben.
myNewDT.MyDateTime.Value
- ist gültig und enthalten eine reguläre DateTime
Objekt.
Was bedeutet diese Meldung und was mache ich falsch?
Beachten Sie, dass oldDTE
ist nicht null
. Ich habe entfernt die Value
aus myNewDT.MyDateTime
aber die gleiche exception geworfen wird durch ein setter generiert.
InformationsquelleAutor der Frage Dani | 2009-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie die Zeile
this.MyDateTime = myNewDT.MyDateTime.Value;
nurthis.MyDateTime = myNewDT.MyDateTime;
Ausnahme, Sie wurden empfangen, wurde geworfen in den
.Value
Eigenschaft des NullableDateTime
wie es erforderlich ist, um wieder eineDateTime
(denn das ist es, was der Vertrag für.Value
Staaten), aber man kann es nicht tun, denn es gibt keineDateTime
zurück, so wirft er eine exception.In der Regel ist es eine schlechte Idee blind zu nennen
.Value
auf eine nullable-Typ, es sei denn, Sie haben einige Vorkenntnisse, die die variable MUSS einen Wert enthalten (z.B. durch einen.HasValue
überprüfen).BEARBEITEN
Hier ist der code für
DateTimeExtended
dass nicht eine Ausnahme werfen:Getestet habe ich es wie folgt:
Hinzufügen der
.Value
aufother.MyDateTime
eine Ausnahme verursacht. Entfernen Sie entledigt die Ausnahme. Ich denke, du suchst an der falschen Stelle.InformationsquelleAutor der Antwort Yuliy
Versuchen fallenlassen der .Wert
InformationsquelleAutor der Antwort Paul Creasey
Bei der Verwendung von LINQ-extension-Methoden (z.B.
Select
Where
), der lambda-Funktion könnte umgewandelt werden in SQL, vielleicht nicht gleich Verhalten, um Ihre C# - code. Zum Beispiel, C#'s short-circuit ausgewertet||
und&&
konvertiert SQL eifrigAND
undOR
. Dies kann Probleme verursachen, wenn Sie null-in Ihrer lambda.Beispiel:
InformationsquelleAutor der Antwort Protector one
Weisen Sie die Mitglieder direkt und ohne
.Value
Teil:InformationsquelleAutor der Antwort Cecil Has a Name
In diesem Fall oldDTE null ist, so dass, wenn Sie versuchen, Zugriff auf oldDTE.Wert der InvalidOperationException geworfen wird, da es keinen Wert. In Ihrem Beispiel können Sie einfach tun:
InformationsquelleAutor der Antwort Lee
Sieht aus wie oldDTE.MyDateTime war null, also der Konstruktor versucht zu nehmen, ist es Wert warf.
InformationsquelleAutor der Antwort Pavel Radzivilovsky
Bekam ich diese Meldung beim Zugriff auf Werte von null bewertet-Objekt.
produziert diese Fehler. Zunächst sollten Sie prüfen ob das Objekt nicht null
Dieser funktioniert.
InformationsquelleAutor der Antwort Juris