加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – FindAll Vs [复制]

发布时间:2020-12-15 07:45:19 所属栏目:百科 来源:网络整理
导读:参见英文答案 LINQ,Where() vs FindAll()4个 我有一个IEnumerable T我想根据LINQ谓词进行过滤.我像往常一样尝试在IEnumerable上使用Where,但这次我偶然发现了一些有趣的东西.当在IEnumerable上调用Where时,使用谓词,我得到一个空列表作为回报.我知道它必须生
参见英文答案 > LINQ,Where() vs FindAll()4个
我有一个IEnumerable< T>我想根据LINQ谓词进行过滤.我像往常一样尝试在IEnumerable上使用Where,但这次我偶然发现了一些有趣的东西.当在IEnumerable上调用Where时,使用谓词,我得到一个空列表作为回报.我知道它必须生成一个包含两个项目的列表.如果我改为使用具有相同谓词的FindAll,则会生成正确的结果.

任何人都可以向我解释,为什么会这样?我一直认为Where是一种懒惰的FindAll版本,它还返回了IEnumerable而不是List.它必须有更多吗? (我做了一些研究,但无济于事.)

码:

IEnumerable<View> views = currentProject.Views.Where(
                    v => v.Entries.Any(e => e.Type == InputType.IMAGE || e.Type == InputType.VIDEO));

IEnumerable<View> views = currentProject.Views.FindAll(
                    v => v.Entries.Any(e => e.Type == InputType.IMAGE || e.Type == InputType.VIDEO));

解决方法

你可以在这里找到答案: LINQ,Where() vs FindAll().基本上,如果你在“Where”上调用.ToList()它们将是相同的.

您可以找到有关延期执行和立即执行之间差异的更多信息:https://code.msdn.microsoft.com/LINQ-Query-Execution-ce0d3b95

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读