可以为空的对象必须有值吗?

Sea*_*_05 33 .net c# exception-handling nullable linq-to-sql

在线:bool travel = fill.travel.Value;我收到以下错误:

可以为空的对象必须具有值

而且我不确定为什么.我想要做的就是获取当前错误的旅行数据库中的值.任何帮助,将不胜感激.

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 
 }
Run Code Online (Sandbox Code Playgroud)

Tej*_*ejs 47

你总是可以切换到

 fill.travel.GetValueOrDefault()
Run Code Online (Sandbox Code Playgroud)

提供默认值(false)或数据库中boolean列的值.或者您可以指定带有重载的默认值.无论哪种方式,nullable当前都没有值,这就是你获得该异常的原因.


Val*_*tin 8

您正在尝试从不存在的对象访问属性(您的fill.travel为null,并且您从中调用prop),您可以使用coalesce运算符(.Net 4.0):

bool travel = fill.travel ?? false;
Run Code Online (Sandbox Code Playgroud)


How*_*sca 6

我发生这种情况是因为有这样的代码:

bool? someVariable = (bool)someNullableBool;
Run Code Online (Sandbox Code Playgroud)

someNullableBool 为空并引发此错误。

解决方案是将其重写为:

bool? someVariable = (bool?)someNullableBool;
Run Code Online (Sandbox Code Playgroud)


Pet*_*hie 5

InvalidOperationException如果HasValue属性为false,则访问Nullable.Value属性将得到一个。