1

What is the fastest way to set properties (any one) to null in an IEnumerable? Is foreach my only option?

4

2 回答 2

7

如果您有一个非常大的列表,您可以考虑并行执行此操作:

enumerable.AsParallel().ForAll(a => a.Value = null);

但值得进行基准测试并牢记,您的对象现在需要是线程安全的。

此处的快速测试显示,当列表大小超过 1000 万个项目时,投资回报率*。较小的列表大小和设置并行处理的成本超过了好处。

*您的里程有所不同

于 2013-01-28T15:42:24.583 回答
1

有两种方法可以实现您的目标:

  1. 正如你提到的:

    foreach(var item in enumeration)
    {
        item.Property = null;
    }
    
  2. 您也可以使用 LINQ:

    enumeration.ToList().ForEach(item => item.Property = null);
    

虽然第二种方式看起来更短且可读性更好,但它可能执行得更慢,因为正如 Jeppe Stig Nielsen 指出的那样,IEnumerable被转换为 a List(第一次枚举它)并且该列表再次被枚举,以最终设置属性。

因此,您是对的:foreach是您唯一的选择。但是foreach-representation 看起来像,您总是需要遍历集合以修改每个项目。

于 2013-01-28T15:31:13.820 回答