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 }