C# 如果返回Null,Linq查询将崩溃

C# 如果返回Null,Linq查询将崩溃,c#,winforms,linq,C#,Winforms,Linq,我运行这个查询,如果查询返回空值,程序就会崩溃 var cust = db.Customers.FirstOrDefault(x => x.telephone == txtTel.Text); if (cust.BlackList == 1) { MessageBox.Show("This customer is blacklisted, Do you wish to continue with this job?"); } 请给我建议一些有效的解决办法 谢谢。您将得到一个空指

我运行这个查询,如果查询返回空值,程序就会崩溃

var cust = db.Customers.FirstOrDefault(x => x.telephone == txtTel.Text);
if (cust.BlackList == 1)
{
    MessageBox.Show("This customer is blacklisted, Do you wish to continue with this job?"); 
}
请给我建议一些有效的解决办法
谢谢。

您将得到一个空指针,因为如果找不到结果,FirstOrDefault将返回对象的默认值(在本例中为空):


您得到的是空指针,因为如果找不到结果,FirstOrDefault将返回对象的默认值(在本例中为空):


您需要检查
null
,因为如果没有满足您的条件的记录,
FirstOrDefault
将返回以下结果:

if(cust != null && cust.BlackList == 1)

您需要检查
null
,因为如果没有满足您的条件的记录,
FirstOrDefault
将返回以下结果:

if(cust != null && cust.BlackList == 1)

如果列表中没有满足条件的元素,FirstOrDefault将返回默认值,在这种情况下,它将为null。当您在null值上调用属性时,它自然会导致异常

您应该检查cust是否为空,如:

if(cust != null && cust.BlackList == 1)

当然,根据应用程序的逻辑,如果用户不存在,则可以显示另一条消息。

如果列表中没有满足条件的元素,则FirstOrDefault将返回默认值,在这种情况下,它将为null。当您在null值上调用属性时,它自然会导致异常

您应该检查cust是否为空,如:

if(cust != null && cust.BlackList == 1)

当然,根据应用程序的逻辑,如果用户不存在,您可以显示另一条消息。

如果
FirstOrDefault()
返回null,即没有这样的记录,您希望发生什么情况?@jon skeet它不应该显示任何消息,但您以后会在该方法中使用
cust
?也许你想马上回来?您是否了解
FirstOrDefault()
如果找不到任何匹配项,则返回
null
(对于引用类型)?(如果您这样做,则不清楚如果它返回null,您为什么不知道该怎么办…@JonSkeet如果cust为return null,则表示客户不是黑名单,可以进行进一步操作。问题是当它返回值时。这与其说是一种错误的方法,不如说是您不理解代码在做什么。如果
cust
null
,则表示查询未返回任何结果。您需要确定在这种情况下要做什么,并避免检查“客户”在这种情况下是否被列入黑名单,因为没有要检查的客户。如果
FirstOrDefault()
返回null,您希望发生什么,也就是说,没有这样的记录?@jon skeet它不应该显示任何消息,但您是否打算稍后在方法中使用
cust
?也许你想马上回来?您是否了解
FirstOrDefault()
如果找不到任何匹配项,则返回
null
(对于引用类型)?(如果您这样做,则不清楚如果它返回null,您为什么不知道该怎么办…@JonSkeet如果cust为return null,则表示客户不是黑名单,可以进行进一步操作。问题是当它返回值时。这与其说是一种错误的方法,不如说是您不理解代码在做什么。如果
cust
null
,则表示查询未返回任何结果。在这种情况下,你需要确定你想做什么,并且避免检查“客户”是否被列入黑名单,因为没有客户需要检查。