FirstOrDefault C# 中的空引用异常

Null Reference exception in FirstOrDefault C#

我有这条线:

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

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

Object reference not set to an instance of an object.

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

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

但是也没用。我怎样才能在这段代码中避免这个异常?如果 Ada No 存在,我怎么写,如果不存在,则不工作?谢谢

如果没有满足条件的对象,

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

如果您使用的是 C# 6.0,则可以使用空值传播运算符:

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

另一种解决方案是检查 Any 是否存在由 Name 等于 "Ada No"

组成的任何成员

请注意 result 也不为空!

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

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