C# c Foreach vs Linq循环?

C# c Foreach vs Linq循环?,c#,asp.net,.net,performance,linq,C#,Asp.net,.net,Performance,Linq,Foreach循环和LINQ循环之间的主要区别是什么 哪一个性能更好,它们的缺点是什么 我有两个不同的例子产生了相同的结果: foreach(var countryItem in input.availableCountries) { var ddlItem = new ListItem(); ddlItem.Text = countryItem.Value; ddlItem.Value = countryItem.Key; ddlNationalityCount

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

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

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

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


我应该使用哪一个?

对于linq操作符,有少量开销。通常,此开销不会驱动应用程序的性能。此外,开销使您能够更轻松地在其他地方创造效率

这种效率的一部分是为了程序员:更干净的代码,更少的bug,更容易维护。效率的一部分在于更容易构建更快的算法

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


如果您只是使用linq编写与使用foreach相同的内容,linq将是一个小型的应用程序!净性能损失,但可能仍然是净生产力的胜利。如果你学会接受linq所能做的,linq将是一个巨大的净性能胜利。

你认为linq使用什么?如果你想知道哪个更快,请尝试两种方法并找出答案。至于你应该使用哪一个——你认为最容易阅读和维护的版本。你做了哪些研究和测试来调查这两个版本在做什么以及它们之间的区别?关于这一点,你理解了什么?你不理解什么?我知道林克做了同样的foreach,但出于某种原因,他们都存在。我想知道主要的区别,也许还有一些棘手的事情。在这种情况下,不会有太大的区别。您可以编写测试代码,看看哪一个速度更快,但我怀疑任何差异是否会显著。Linq不是魔术,无法避免必须访问列表中的每一项,所以这两项都会出现。至于它们都存在的原因,Linq为您提供了一种不同的、更具表现力的语法。在这种情况下,再次强调一次,它不会造成很大的区别,但在更复杂的情况下,编写linq比编写一个充满大量条件检查的foreach要干净得多。foreach和linq语句之间的主要区别是一个类似于PASCAL,另一个类似于HASKELL…:@Alexander:这两种语言在C语言中都有自己的位置,如果你想修改、添加、删除某些内容,foreach更合适;如果你想用read something来查询某些内容,LINQ更具可读性。在本例中,OP已经具备了将其添加到DropDownList:input.availableCountries中所需的全部功能。所以不需要使用LINQ。@TimSchmelter:如果您想修改、添加、删除某些内容,foreach更合适:只是您不能添加或删除正在迭代的集合。@MattBurland:某些内容与其他内容类似。在本例中,DropDownList的项目。@MattBurland首先,这在技术上是不正确的。某些集合在修改集合时显式中断其迭代器。很多人没有。有些甚至可以在变异时进行迭代时正常工作。此外,对于具有这种行为的用户,在不迭代集合时,您仍然可以修改集合,而可以修改其他内容。
ddlNationalityCountry.Items.AddRange(input.availableCountries.Select(
    item => new ListItem { 
        Text = item.Value,
        Value = item.Key
    }).ToArray());