什么是最好的LINQ方法,没有性能损失?我们怎样才能使用LINQ迭代列表一次呢?
class Employee
{
string name ...;
string age .....;
int empType ...;
int income ...;
}
List<Employee> myList ...;
List<Employee> toList...;
int totalIncomeOfToList = 0;
foreach(Employee emp in myList)
{
if(emp.empType == 1)
{
toList.Add(emp);
totalIncomeOfToList += emp.income;
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
(我假设你也想要过滤列表 - 到目前为止给出的其他答案只会得到总和,而不是列表.如果你不需要列表,它们绝对没问题,但是它们是不等同于您的原始代码.)
那么你可以只迭代原始列表一次 - 然后迭代过滤后的列表:
var toList = myList.Where(e => e.empType == 1).ToList();
var totalIncomeOfToList = toList.Sum(e => e.income);
Run Code Online (Sandbox Code Playgroud)
诚然,这可能是一个有点低效率通过处理器缓存吹两次的条件,但我会感到惊讶,如果它是显著.如果您可以证明它很重要,您可以随时返回"手动"版本.
你可以在其中写一个带有副作用的投影,一次性完成所有这一切,但这太难看了,除非我真的被迫这样做,否则我甚至不会把它包括在答案中.
| 归档时间: |
|
| 查看次数: |
1728 次 |
| 最近记录: |