C# 聚合与任意,用于扫描对象,如IEnumerable<;布尔>;
我只是想知道,是否有LINQ大师能够阐明聚合和任何工作是如何进行的 假设我有一个IEnumerable,它存储在给定条件下测试数组的结果。我想确定数组中的任何元素是否为false。有什么理由让我更喜欢其中一个选项吗C# 聚合与任意,用于扫描对象,如IEnumerable<;布尔>;,c#,linq,C#,Linq,我只是想知道,是否有LINQ大师能够阐明聚合和任何工作是如何进行的 假设我有一个IEnumerable,它存储在给定条件下测试数组的结果。我想确定数组中的任何元素是否为false。有什么理由让我更喜欢其中一个选项吗 IEnumerable<bool> results = PerformTests(); return results.Any(r => !r); //Option 1 return results.Aggregate((h, t) => h &&am
IEnumerable<bool> results = PerformTests();
return results.Any(r => !r); //Option 1
return results.Aggregate((h, t) => h && t); //Option 2
IEnumerable results=PerformTests();
返回结果.Any(r=>!r)//选择1
返回结果。聚合((h,t)=>h&&t)//选择2
在生产代码中,我倾向于1,因为它更明显,但出于好奇,我想知道在引擎盖下评估这些代码的方式是否有差异。是的,当然更喜欢选项1-一旦发现任何错误的值,它就会停止 选项2将遍历整个阵列
当然,还有可读性问题:)是的,当然更喜欢选项1——一旦发现任何值为false,它就会停止 选项2将遍历整个阵列
当然,还有可读性问题:)乔恩再次击败了我,但要添加更多的文本: 聚合始终需要使用整个
IEnumerable
,因为这正是它应该做的:从(完整的)源生成数据集。
这是著名的Map/Reduce场景中的“Reduce”。Jon再次击败了我,但要添加更多的文本: 聚合始终需要使用整个
IEnumerable
,因为这正是它应该做的:从(完整的)源生成数据集。
这是著名的Map/Reduce场景中的“Reduce”。啊,好吧-我想知道它是否足够聪明,一旦头部出错,就立即停止,因为我知道结果总是错误的。谢谢啊,好吧——我想知道,如果头部一变为假,它就停下来,知道结果总是假的,这是否足够聪明。谢谢感谢这些额外的东西-我一直在使用聚合来进行一些小字符串连接和其他转换,并发现自己在意识到任何()之前自动编写了选项2是一个简单得多的选项。除非您需要为每个连接执行其他操作,否则我建议使用字符串。通过聚合连接IEnumerable。感谢额外的功能-我一直在使用聚合进行一些小字符串连接和其他转换,并发现自己自动编写选项2,在意识到Any()是一个简单得多的选项之前。除非每次连接都需要做其他事情,否则我建议使用string.Join over Aggregate来连接IEnumerable。