gpt4 book ai didi

c# - 什么时候应该将集合循环转换为 Linq 语句?

转载 作者:行者123 更新时间:2023-11-30 19:10:41 24 4
gpt4 key购买 nike

我最近开始使用 ReSharper。

ReSharper 建议将集合上的所有循环(通常是 foreach)转换为 Linq 语句,即使循环包含各种条件也是如此。

  • 这会提高性能吗?
  • 这是否使代码更具可读性?

一般来说,在这件事上我什么时候应该遵循 ReSharper 的建议,什么时候不应该?

最佳答案

Does this improve performance?

一般不会影响性能。可以设计使用 LINQ 提高性能的情况,但一般情况下不会。

Does this make code more readable?

很多时候是的,因为它将强调迭代的机制的结构替换为强调迭代的目的的结构。

强调力学:

var jacks = new List<Person>();
foreach (var person in persons)
{
if (person.Name == "Jack")
{
jacks.Add(person);
}
}

"This code iterates over persons, and every time it finds a person named Jack it adds them to the list named jacks".

有意强调:

var jacks = persons.Where(p => p.Name == "Jack").ToList();

"Take all persons whose name is Jack and put them into a list. We 'll call that list jacks."

第二个版本更短也没有坏处,因此您的大脑可以比第一个版本更容易地同时消化所有内容。

另一个例子:

var furryAnimals = furryThings.Intersect(animals).ToArray();

如果没有 LINQ 或编写您自己的等效项,您绝对无法达到这种清晰度。这里很明显 furryAnimals 包含 furryThingsanimals 中的所有内容。这就是您所关心的。

关心这些集合的交集是如何计算的。计算可能涉及字典作为实现细节。但是从创建该字典开始的代码的替代版本会立即将您的注意力吸引到最不重要的一件事:实现细节。

In general, when should I follow ReSharper suggestion in this matter, and when I should not?

规则总有异常(exception),所以我不会在这里展示。但总的来说,我们希望代码是正确的、可维护的和快速的(通常按此顺序)。我将假设代码无论哪种方式都是正确的,因此无论何时您必须做出决定,请始终考虑:

  • 更改是否使代码更清晰易懂?它是否使代码将来更容易修改?

如果您有具体证据代码速度至关重要,请考虑:

  • 哪个版本运行得更快?

关于c# - 什么时候应该将集合循环转换为 Linq 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16265027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com