What is the fastest way to set properties (any one) to null
in an IEnumerable
? Is foreach
my only option?
问问题
2164 次
2 回答
7
如果您有一个非常大的列表,您可以考虑并行执行此操作:
enumerable.AsParallel().ForAll(a => a.Value = null);
但值得进行基准测试并牢记,您的对象现在需要是线程安全的。
此处的快速测试显示,当列表大小超过 1000 万个项目时,投资回报率*。较小的列表大小和设置并行处理的成本超过了好处。
*您的里程会有所不同
于 2013-01-28T15:42:24.583 回答
1
有两种方法可以实现您的目标:
正如你提到的:
foreach(var item in enumeration) { item.Property = null; }
您也可以使用 LINQ:
enumeration.ToList().ForEach(item => item.Property = null);
虽然第二种方式看起来更短且可读性更好,但它可能执行得更慢,因为正如 Jeppe Stig Nielsen 指出的那样,IEnumerable
被转换为 a List
(第一次枚举它)并且该列表再次被枚举,以最终设置属性。
因此,您是对的:foreach
是您唯一的选择。但是foreach
-representation 看起来像,您总是需要遍历集合以修改每个项目。
于 2013-01-28T15:31:13.820 回答