我正在考虑一个重要因素,但我不知道最终结果是否过度.目前我有
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)
演员会在这里成为一个重要的开销吗?
为什么不直接在IList上使用SUM运算符?
它使用Func委托有几个重载:
m_items.Sum(x => x.GetIncrement());
Run Code Online (Sandbox Code Playgroud)
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)
两者都比原始版本有轻微的开销,因此如果您想要最有效的,只需坚持使用简单的循环即可。