Find()和First()抛出异常,如何返回null?


76

搜索列表时,是否有一个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,只有更好的解决方案才是好的)

Answers:


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

52

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
}

9
并且不要忘记-如果您的列表将包含该泛型类型的默认值默认值表),则无法使用Findmethod判断该值是否存在。您应该使用FindIndexExists或者Contains在这种情况下使用。
HuBeZa 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.