这会改善性能吗?
通常,它不会影响性能.可以设计使用LINQ改善或降低性能的情况,但在一般情况下则不行.
这是否使代码更具可读性?
很多时候是的,因为它取代了强调迭代机制的构造,强调了迭代的目的.
强调力学:
var jacks = new List<Person>();
foreach (var person in persons)
{
if (person.Name == "Jack")
{
jacks.Add(person);
}
}
Run Code Online (Sandbox Code Playgroud)
"这段代码遍历了人,每当它找到一个名为Jack的人时,它就会将它们添加到名为jacks的列表中".
强调目的:
var jacks = persons.Where(p => p.Name == "Jack").ToList();
Run Code Online (Sandbox Code Playgroud)
"把所有名叫杰克的人都列入名单.我们称之为名单杰克."
第二个版本要短得多也没有什么坏处,所以你的大脑可以比第一个版本更容易消耗它.
另一个例子:
var furryAnimals = furryThings.Intersect(animals).ToArray();
Run Code Online (Sandbox Code Playgroud)
绝对没有办法在没有LINQ或编写自己的等价物的情况下匹配清晰度.这里很明显furryAnimals包含任何内部furryThings和内部的内容animals.这就是你关心的一切.
您并不关心如何计算这些集合的交集.计算可能涉及字典作为实现细节.但是,从创建该字典开始的代码的替代版本会立即引起您对最不重要的事情的关注:实现细节.
一般来说,我什么时候应该遵循ReSharper这个问题的建议,什么时候不应该?
规则总是有例外,所以我不会尝试在这里提出一个.但总的来说,我们希望代码是正确的,可维护的和快速的(通常按顺序).我将假设代码是正确的,所以无论何时你必须做出决定,总是考虑:
如果您具有代码速度至关重要的具体证据,请考虑: