在线:bool travel = fill.travel.Value;
我收到以下错误:
Nullable对象必须具有值
我不知道为什么。我想要做的就是获取当前错误的旅行数据库中的值。任何帮助,将不胜感激。
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
}
答案 0 :(得分:42)
您可以随时切换到
fill.travel.GetValueOrDefault()
提供默认值(false)或数据库中boolean列的值。或者您可以指定带有重载的默认值。无论哪种方式,nullable当前都没有值,这就是你获得该异常的原因。
答案 1 :(得分:8)
您正在尝试从不存在的对象访问属性(您的fill.travel为null,并且您从中调用prop), 你可以使用coalesce operator(.Net 4.0):
bool travel = fill.travel ?? false;
答案 2 :(得分:4)
如果您在HasValue属性为false时访问Nullable.Value属性,您将获得InvalidOperationException
。
答案 3 :(得分:3)
在实际访问其值
之前,您可以检查可空变量是否具有这样的值if(fill.travel.HasValue)
{
bool travel = fill.travel.Value;
}
答案 4 :(得分:3)
来自数据库的值是可以为空的布尔值。当您调用Nullable.Value,并且值为null时,您将获得此异常。在调用.Value之前,请考虑检查属性Nullable.HasValue。
答案 5 :(得分:1)
Null不是假的。请参阅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的解决方案答案 6 :(得分:0)
您始终可以使用经典C语言吗?像这样的运算符:
bool travel = (fill.travel == null ? false : fill.travel.Value);
答案 7 :(得分:0)
发生这种情况是因为有这样的代码:
bool? someVariable = (bool)someNullableBool;
someNullableBool为空,并且引发了此错误。
解决方案是将其重写为:
bool? someVariable = (bool?)someNullableBool;