我的一個同事開始使用此代碼:檢測與靜態分析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) –