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

时间:2011-04-10 17:22:24

标签: c# .net linq lambda

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

2 个答案:

答案 0 :(得分:118)

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

答案 1 :(得分:38)

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
}