Un collègue de travail de la mine a commencé avec ce code:utilisation abusive Détection de lambdas avec l'analyse statique dans VS2010
var newList = new List<>();
foreach(var item in otherList)
{
newList.Add(GetNewObjectFrom(item));
}
ReSharper correctement identifié une utilisation de LINQ ici, et changé à:
var newList = otherList.Select(o => GetNewObjectFrom(o)).ToList();
Cependant , le lambda est inutile, et pourrait être encore simplifié en passant simplement la méthode:
var newList = otherList.Select(GetNewObjectFrom).ToList();
Ma question:
Est-ce que n'importe quel outil dans Visual Studio 2010 Professional, ou divers bras de torsion de ReSharper, peut détecter cette modification? Je me rends compte que le meilleur outil est un deuxième regard humain, et c'est de là que vient cette question ... mais plus mon travail est fait par les ordinateurs, mieux c'est.
edit: génial, c'est un bug de ReSharper. Voici un exemple de programme:
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;
}
}
}
modifier 2: J'ai posté une question sur de JetBrains YouTrack: http://youtrack.jetbrains.com/issue/RSRP-301259
Resharper détecte déjà cela et suggère la simplification. –
nuh-uh (15 caractères) (essayant aussi de construire R # 7.0 pour voir si c'est le cas) –
J'ai vérifié avant de poster mes commentaires, et je peux vous assurer qu'il le détecte (VS2010 Pro SP1, Resharper 5.1.3) –