c# Foreach vs Linq looping?

本文关键字:looping Linq vs Foreach | 更新日期: 2023-09-27 18:20:51

Foreach循环和LINQ循环之间的主要区别是什么?

哪一种性能更好,它们的缺点是什么。

我有两个不同的例子可以产生相同的结果:

foreach(var countryItem in input.availableCountries) {
    var ddlItem = new ListItem();
    ddlItem.Text = countryItem.Value;
    ddlItem.Value = countryItem.Key;
    ddlNationalityCountry.Items.Add(ddlItem);
}

ddlNationalityCountry.Items.AddRange(input.availableCountries.Select(
    item => new ListItem { 
        Text = item.Value,
        Value = item.Key
    }).ToArray());

我应该用哪一个?

c# Foreach vs Linq looping?

linq运算符有少量开销。通常,这种开销是而不是驱动应用程序的性能。此外,开销为您购买了在其他地方更容易创造效率的能力。

其中一些效率是程序员的:更干净的代码,更少的错误,更容易维护。效率的一部分在于更容易构建更快的算法。

我的意思是,您的第一个示例是将项目添加到集合中。您的第二个样本正在生成一个数组。你为什么要创建那个数组?我知道函数调用需要它,但在大多数其他情况下,你不会。Linq允许您从收集的管道的角度进行思考,在管道中,最终结果直到最后一步才完全实现,并且一路上的每一步都只作用于那些相关的元素,因此通常比Linq开销节省更多的计算机时间或ram。

如果你只使用linq来写与foreach相同的事情,linq将是一个(小的!)净性能损失(但可能仍然是一个净生产力的胜利)。如果你学会接受林克所能做的,林克可以在比赛中大获全胜。