wake-up-neo.com

Das Objekt mit dem Wert "null" braucht einen Wert?

In der Zeile: bool travel = fill.travel.Value; erhalte ich folgende Fehlermeldung:

Das Objekt mit dem Wert "null" braucht einen Wert

und ich bin mir nicht sicher warum. Ich möchte nur den Wert in der Reisedatenbank abrufen, der zurzeit falsch ist. Jede Hilfe wäre dankbar. 

using (var db = new DataClasses1DataContext())
{
    var fill = (from f in db.expenseHdrs
                where f.rptNo == getPkRowReport()
                select f).FirstOrDefault();

    txtReportDesc.Text = fill.description;
    txtPeriod.Text = fill.period;
    txtPurpose.Text = fill.purpose;

    bool travel = fill.travel.Value;
    chkTravel.Checked = travel 
 }
28
Sealer_05

Sie können jederzeit zu wechseln

 fill.travel.GetValueOrDefault()

Geben Sie den Standardwert (false) oder den Wert der booleschen Spalte aus der Datenbank an. Oder Sie können den Standardwert mit einer Überladung angeben. In beiden Fällen hat das Nullwert-Element derzeit keinen Wert, weshalb Sie diese Ausnahme erhalten.

40
Tejs

Sie versuchen, auf die Eigenschaft über das nicht vorhandene Objekt zuzugreifen (Ihre fill.travel ist null und Sie rufen mit prop darauf auf).

bool travel = fill.travel ?? false;
7
Val Bakhtin

Sie erhalten ein InvalidOperationException, wenn Sie auf die Nullable.Value-Eigenschaft zugreifen, wenn die HasValue-Eigenschaft false ist.

4
Peter Ritchie

Sie können überprüfen, ob die nullfähige Variable einen solchen Wert hat, bevor Sie tatsächlich auf ihren Wert zugreifen

if(fill.travel.HasValue)
{
   bool travel = fill.travel.Value;
}
3
Adil

Der Wert, der aus der Datenbank stammt, ist ein boolescher Wert, der mit Nullen versehen werden kann. Wenn Sie Nullable.Value aufrufen und der Wert null ist, erhalten Sie diese Ausnahme. Prüfen Sie die Eigenschaft Nullable.HasValue, bevor Sie .Value aufrufen.

2
Oblivion2000

Null ist nicht falsch. Siehe dazu Eric Lipperts Blogartikel-Serie unter: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

Sie müssen ein Null-Ergebnis in ein falsches Ergebnis verarbeiten, wenn Sie es auf diese Weise übersetzen möchten. 

Um diesen Fall deutlich zu machen, betrachten Sie diesen Code:

bool travel;
bool? temptravel = fill.travel.Value;
if( temptravel == true )
    travel = true;
else
    travel = false;

Oder verwenden Sie einfach die Lösung von Val Bakhtin, wenn Sie .Net 4 verwenden

1
StarPilot

Sie können immer den klassischen C verwenden? Betreiber wie folgt:

bool travel = (fill.travel == null ? false : fill.travel.Value);

Ich hatte dies geschehen, weil es Code wie folgt gab:

bool? someVariable = (bool)someNullableBool;

Das someNullableBool war null und dieser Fehler wurde ausgelöst.

Die Lösung bestand darin, es umzuschreiben als:

bool? someVariable = (bool?)someNullableBool;
0