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

有没有一个linq lambdasearch方法返回null,而不是抛出一个exception时,search列表?

我目前的解决scheme是这样的:(避免被抛出exception)

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

重复这个expression只是感觉不对。

就像是 …

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

…对我感觉更好。 还是只是我?

你对这个有更好的方法吗? (解决scheme不必返回null,只是一个更好的解决scheme是好的)

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

巴拉R的回答是正确的,我只是想添加一条信息:

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

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