Find()和First()抛出异常,如何返回空而不是

本文关键字:返回 First 抛出异常 Find 何返回 | 更新日期: 2023-09-27 17:49:42

在搜索列表时,是否有一个linq lambda搜索方法返回null,而不是抛出异常?

我目前的解决方案是这样的:(避免抛出异常)

if (list.Exists(x => x.Foo == Foo))
{
    var listItem = list.Find(x => x.Foo == Foo);
}

重复这个表达感觉不对。

像是…

var listItem = list.Find(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}

…我感觉好多了。还是只有我这么想?

你有更好的方法吗?(解决方案不一定要返回null,只是一个更好的解决方案是好的)

Find()和First()抛出异常,如何返回空而不是

var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (listItem != null)
{
    //Do stuff
}

Bala R的答案是正确的,我只是想补充一点信息:

请注意,如果List<T>包含设计不能为null的对象,则FirstOrDefault将返回null以外的其他内容。编译器可能会在if语句中给出警告/错误。在这种情况下,你应该这样处理你的情况:

List<MyObjectThatCannotBeNull> list;
var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (!listItem.Equals(default(MyObjectThatCannotBeNull)))
{
    //Do stuff
}

可以使用"is"接线员:)

  List<T> list;
  if (list.Find(x => x.Foo == Foo) is T yourObject)
  {
     //do stuff with yourObject.
  }