我的一个同事开始使用此代码:检测与静态分析lambda表达式的滥用在VS2010
var newList = new List<>();
foreach(var item in otherList)
{
newList.Add(GetNewObjectFrom(item));
}
ReSharper的正确标识的使用LINQ的在这里,并把它改为:
var newList = otherList.Select(o => GetNewObjectFrom(o)).ToList();
然而,拉姆达是不必要的,并且可以通过只传递该方法进一步简化:
var newList = otherList.Select(GetNewObjectFrom).ToList();
我的问题:
Visual Studio 2010 Professional中的任何工具或者ReSharper的各种手臂扭曲都可以检测到应该进行的更改吗?我意识到最好的工具是第二套人类的眼睛,这就是从这个问题开始的地方......但是我的计算机完成的工作越多越好。
编辑:真棒,这是一个ReSharper错误。下面是一个示例程序:
using System.Linq;
namespace ResharperMethodGroupBug
{
class Program
{
static void Main(string[] args)
{
var program = new NumberProgram(new NumberProcessor());
program.Run();
}
}
class NumberProgram
{
private readonly INumberProcessor numberProcessor;
public NumberProgram(INumberProcessor numberProcessor)
{
this.numberProcessor = numberProcessor;
}
static long SquareNumber(int n)
{
return n * n;
}
public void Run()
{
var listOfNumbers = Enumerable.Range(1, 100).ToList();
// appropriately triggers "convert to method group"
var listOfSquares = listOfNumbers.Select(n => SquareNumber(n));
// does not trigger "convert to method group" when it should
var listOfCubes = listOfNumbers.Select(n => this.numberProcessor.CubeNumber(n));
// proof that a method group works here
var anotherListOfCubes = listOfNumbers.Select(this.numberProcessor.CubeNumber);
}
}
interface INumberProcessor
{
long CubeNumber(int n);
}
class NumberProcessor : INumberProcessor
{
public long CubeNumber(int n)
{
return n * n * n;
}
}
}
编辑2:我已经张贴在JetBrains公司Youtrack一个问题:http://youtrack.jetbrains.com/issue/RSRP-301259
Resharper已经检测到这一点,并建议简化。 –
nuh-uh(15个字符)(也试图R#7.0构建看看是否有这样做) –
我发布我的意见之前检查过,我可以向你保证它确实检测到它(VS2010 Pro SP1,Resharper 5.1.3) –