53

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

8 回答 8

66

你可以随时切换到

 fill.travel.GetValueOrDefault()

提供默认值 (false),或来自数据库的布尔列的值。或者,您可以使用重载指定默认值。无论哪种方式,可空值当前都没有值,这就是您得到该异常的原因。

于 2012-05-11T17:10:48.257 回答
14

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

bool travel = fill.travel ?? false;
于 2012-05-11T17:29:18.033 回答
7

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

于 2012-05-11T17:10:23.887 回答
4

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

if(fill.travel.HasValue)
{
   bool travel = fill.travel.Value;
}
于 2012-05-11T17:10:50.110 回答
4

来自数据库的值是一个可为空的布尔值。当你调用 Nullable.Value 并且值为 null 时,你会得到这个异常。考虑在调用 .Value 之前检查属性 Nullable.HasValue。

于 2012-05-11T17:11:03.893 回答
2

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

bool? someVariable = (bool)someNullableBool;

someNullableBool 为 null 并引发此错误。

解决方案是将其重写为:

bool? someVariable = (bool?)someNullableBool;
于 2019-03-16T20:06:50.323 回答
1

空不是假的。请参阅 Eric Lippert 的博客文章系列,网址为:http: //blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

如果您想翻译它,您需要将空结果处理为假。

为了清楚地说明这种情况,请考虑以下代码:

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

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

于 2012-05-11T18:05:49.587 回答
0

你总是可以使用经典的 C 吗?像这样的运算符:

bool travel = (fill.travel == null ? false : fill.travel.Value);
于 2019-02-04T11:54:22.603 回答