有没有一个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,只要有更好的解决方案就好)
3条答案
按热度按时间gtlvzcf81#
l3zydbqr2#
巴拉R的答案是正确的,我只是想补充一条信息:
请注意,如果
List<T>
包含的对象按设计不能为null,则FirstOrDefault
将返回null
以外的内容。编译器可能会在if语句中给予一个警告/错误。在这种情况下,你应该像这样处理你的情况:ftf50wuq3#
Find
不会trow异常,除非 predicate 为null。你可以使用“is”操作符:)
Find
返回第一个与指定 predicate 定义的条件相匹配的元素(如果找到);否则为类型T的默认值。所以你可以用FirstOrDefault得到同样的结果