Find() 和 First() 抛出异常,如何改为返回 null?
Posted
技术标签:
【中文标题】Find() 和 First() 抛出异常,如何改为返回 null?【英文标题】:Find() and First() throws exceptions, how to return null instead? 【发布时间】:2011-08-02 13:49:27 【问题描述】:在搜索列表时,是否有返回 null 而不是抛出异常的 linq lambda 搜索方法?
我目前的解决方案是这样的:(避免抛出异常)
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,更好的解决方案就好)
【问题讨论】:
Listvar listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (listItem != null)
//Do stuff
【讨论】:
【参考方案2】:巴拉R的回答是对的,我只是想补充一点:
请注意,如果List<T>
包含设计上不能为空的对象,则FirstOrDefault
将返回null
以外的其他内容。编译器可能会在 if 语句中给出警告/错误。在这种情况下,您应该像这样处理您的情况:
List<MyObjectThatCannotBeNull> list;
var listItem = list.FirstOrDefault(x => x.Foo == Foo);
if (!listItem.Equals(default(MyObjectThatCannotBeNull)))
//Do stuff
【讨论】:
不要忘记 - 如果您的列表将包含该泛型类型的默认值 (Default Values Table),您无法使用Find
方法判断该值是否存在。在这些情况下,您应该使用FindIndex
、Exists
或Contains
。【参考方案3】:
你可以使用“is”运算符:)
List<T> list;
if (list.Find(x => x.Foo == Foo) is T yourObject)
//do stuff with yourObject.
【讨论】:
以上是关于Find() 和 First() 抛出异常,如何改为返回 null?的主要内容,如果未能解决你的问题,请参考以下文章