对象引用在使用FirstOrDefault时未设置为对象错误的实例

本文关键字:对象 错误 实例 设置 FirstOrDefault 对象引用 | 更新日期: 2023-09-27 18:09:44

当我使用下面的代码时,我得到对象引用错误,这可能是因为没有匹配"spider"。我的问题是,如何检查空值在这些情况下

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID;

我在不同的条件下使用相同的场景,从列表中获取不同的项目,如

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 
String fooDescription = foos.FirstOrDefault(f => f.Sides == "Cake").Description; 

对象引用在使用FirstOrDefault时未设置为对象错误的实例

就像你通常所做的那样,分配一个变量并检查它

var foo = foos.FirstOrDefault(f => f.Bar == "spider");
if (foo != null)
{
    int fooID = foo.ID;
}

根据更新后的示例,您需要这样做:

var fooForId = foos.FirstOrDefault(f => f.Bar == "spider");
var fooForDescription = foos.FirstOrDefault(f => f.Sides == "Cake");
int fooId = fooForId != null ? fooForId.Id : 0;
string fooDescription = fooForDescription != null ? fooForDescription.Description : null; // or string.Empty or whatever you would want to use if there is no matching description.

如果没有匹配的元素,您可能还希望使用DefaultIfEmpty扩展方法来处理行为。下一段代码演示了

的用法
string[] foos = {"tyto", "bar"};
var res = foos.Where(s => s.Length == 2)
              .DefaultIfEmpty("default")
              .First()
              .Length;
Console.WriteLine (res); //will print the length of default, which is 7