c# FirstOrDefault中的空引用异常

本文关键字:引用 异常 FirstOrDefault | 更新日期: 2023-09-27 18:16:05

我有这样一行:

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

有时结果没有"Ada No",我得到

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

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

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

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

c# FirstOrDefault中的空引用异常

FirstOrDefault将返回null,如果没有任何对象满足条件。当代码试图访问被设置为null的引用类型变量的成员时,将抛出异常。因此,在访问该对象之前,必须检查该对象的值是否为null。

如果你使用c# 6.0,你可以使用null传播运算符:

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;
}

如果存在由Name =" Ada No"组成的成员,则使用Any进行检查

注意result也不是空的!

但是null传播方式会更少写,所以这取决于你的偏好,你想如何阅读你的代码,如果它是一些性能关键的代码

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