FirstOrDefault中的空引用异常C#

时间:2016-11-02 06:40:15

标签: c# nullreferenceexception

我有这一行:

myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value;

有时结果没有“Ada No”而我得到了

  

对象引用未设置为对象的实例。

我写了一个if语句来避免空引用异常:

if(result.FirstOrDefault(m => m.Name == "Ada No").Value != null)
{
   myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No").Value;
}

但它也没有用。如何在这段代码中避免此异常?如果Ada No存在,工作,如果不工作,我怎么写?感谢。

2 个答案:

答案 0 :(得分:7)

如果没有任何符合条件的对象,

FirstOrDefault将返回null。当代码试图访问设置为null的引用类型变量的成员时,将抛出异常。因此,在访问对象之前,必须检查对象的值是否为空。

如果您使用的是C#6.0,则可以使用null-propagation运算符:

myobject.Ada = result.FirstOrDefault(m => m.Name == "Ada No")?.Value;

或者如果您使用的是较低版本:

var firstObj = result.FirstOrDefault(m => m.Name == "Ada No");

if(firstObj != null)
{
    myobject.Ada = firstObj.Value;
}

答案 1 :(得分:2)

另一个解决方案是检查Any是否存在任何包含名称等于“Ada No”的成员

请注意.hidden { display: none !important; } add-feature-field-row .form-control { display: inline-block; width: 90px; } .form-control { display: block; width: 100%; height: 34px; padding: 6px 12px; font-size: 14px; line-height: 1.42857143; color: #555; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075); box-shadow: inset 0 1px 1px rgba(0,0,0,.075); -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s; -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s; } button, input, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit; } button, input, optgroup, select, textarea { margin: 0; font: inherit; color: inherit; } 也不为空!

但是空传播方式写入的次数会少一些,所以它取决于您的偏好,您希望如何读取代码以及它是否是一些性能关键的代码

result