在这种情况下使用linq矫枉过正

And*_*rew 8 c# linq

我正在考虑一个重要因素,但我不知道最终结果是否过度.目前我有

    IList<myobjecttypebase> m_items;

   public int GetIncrementTotal()
   {
     int incrementTot;
     foreach(myobjecttypebase x in m_items)
     { incrementTot += x.GetIncrement(); }
   }
Run Code Online (Sandbox Code Playgroud)

使用linq for ForEach会有多大和/或效率低下

m_items.ToList().ForEach(x => incrementTot += x.GetIncrement());
Run Code Online (Sandbox Code Playgroud)

演员会在这里成为一个重要的开销吗?

Ode*_*ded 7

为什么不直接在IList上使用SUM运算符?

它使用Func委托有几个重载:

m_items.Sum(x => x.GetIncrement());
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 4

ToList 方法是与 LINQ 一起使用的扩展方法,但 ForEach 方法只是 List 类中的一个方法。

这里的主要开销是对 ToList 方法的调用,该方法从集合中创建一个新的 List。ForEach 也有一点开销,因为它必须为每个项目调用委托。

如果您想使用 LINQ 方法,Aggregate 方法似乎更合适:

public int GetIncrementTotal() {
  return m_items.Aggregate(0, (t, i) => t + i.GetIncrement());
}
Run Code Online (Sandbox Code Playgroud)

或总和:

public int GetIncrementTotal() {
  return m_items.Sum(i => i.GetIncrement());
}
Run Code Online (Sandbox Code Playgroud)

两者都比原始版本有轻微的开销,因此如果您想要最有效的,只需坚持使用简单的循环即可。