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

在线: 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 } 

你总是可以切换到

  fill.travel.GetValueOrDefault() 

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

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

 bool travel = fill.travel ?? false; 

如果在HasValue属性为false时访问Nullable.Value属性,则会出现InvalidOperationException

在实际访问其值之前,您可以检查可空变量是否具有这样的值

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

来自数据库的值是可以为空的布尔值。 当您调用Nullable.Value,并且值为null时,您将获得此exception。 在调用.Value之前,请考虑检查属性Nullable.HasValue。

空虚并非虚假。 请参阅Eric Lippert关于此的博客文章系列: http : //blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

如果您想要翻译它,则需要将null结果处理为false。

为了清楚这一点,请考虑以下代码:

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

或者,如果您使用的是.Net 4,请使用Val Bakhtin的解决方案