就行: 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()
以提供默认值(假),或从数据库的布尔列的值。 或者你也可以指定与过载的默认值。 无论哪种方式,可为空目前不必须的值,这就是为什么你会得到例外。
您正在尝试从不存在的对象访问属性(您fill.travel是空的,你叫从中道具),你可以使用COALESCE操作符(.NET 4.0):
bool travel = fill.travel ?? false;
你会得到一个InvalidOperationException
,如果你访问Nullable.Value属性时HasValue属性是假的。
您可以检查是否为空的变量之前,有一些像这样的价值您的实际访问它的价值
if(fill.travel.HasValue)
{
bool travel = fill.travel.Value;
}
来自数据库的值是一个可空布尔值。 当你打电话Nullable.Value,和值为空,你会得到这个例外。 考虑调用.value的前检查房子Nullable.HasValue。
空是不假。 见埃里克利珀的这个博客系列文章在: 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
您可以随时使用经典的C? 操作是这样的:
bool travel = (fill.travel == null ? false : fill.travel.Value);
我有这种情况发生,因为有这样的代码:
bool? someVariable = (bool)someNullableBool;
该someNullableBool为null,并抛出这个错误。
解决的办法是将它重新写为:
bool? someVariable = (bool?)someNullableBool;