可空对象必须有一个值?(Nullable object must have a value?)

2019-06-24 08:41发布

就行: 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 
 }

Answer 1:

您可以随时切换到

 fill.travel.GetValueOrDefault()

以提供默认值(假),或从数据库的布尔列的值。 或者你也可以指定与过载的默认值。 无论哪种方式,可为空目前不必须的值,这就是为什么你会得到例外。



Answer 2:

您正在尝试从不存在的对象访问属性(您fill.travel是空的,你叫从中道具),你可以使用COALESCE操作符(.NET 4.0):

bool travel = fill.travel ?? false;


Answer 3:

你会得到一个InvalidOperationException ,如果你访问Nullable.Value属性时HasValue属性是假的。



Answer 4:

您可以检查是否为空的变量之前,有一些像这样的价值您的实际访问它的价值

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


Answer 5:

来自数据库的值是一个可空布尔值。 当你打电话Nullable.Value,和值为空,你会得到这个例外。 考虑调用.value的前检查房子Nullable.HasValue。



Answer 6:

空是不假。 见埃里克利珀的这个博客系列文章在: 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



Answer 7:

您可以随时使用经典的C? 操作是这样的:

bool travel = (fill.travel == null ? false : fill.travel.Value);


Answer 8:

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

bool? someVariable = (bool)someNullableBool;

该someNullableBool为null,并抛出这个错误。

解决的办法是将它重新写为:

bool? someVariable = (bool?)someNullableBool;


文章来源: Nullable object must have a value?