Что на самом деле делает этот фрагмент ReSharper «преобразовать в группу методов»? - PullRequest
8 голосов
/ 25 августа 2011

enter image description here

Код до изменений:

List<ProductBrandModel> model = brands.Select(item => Mapper.Map<ProductBrand, ProductBrandModel>(item)).ToList();

Код после улучшения:

List<ProductBrandModel> model = brands.Select(Mapper.Map<ProductBrand, ProductBrandModel>).ToList();

Что это делает?Неявно ли выполняется это сопоставление для каждого элемента в коллекции brands?

Ответы [ 2 ]

10 голосов
/ 25 августа 2011

Поскольку вы напрямую передаете параметр лямбда-выражения в метод Mapper.Map, это в точности эквивалентно указанию этого метода непосредственно в качестве проекции для Select. Сигнатура Mapper.Map совместима с делегатом Func<TSource, TResult>, поэтому R # предлагает использовать группу методов напрямую, а не лямбда-выражение.

3 голосов
/ 25 августа 2011

В первой строке создается метод, который немедленно вызывает функцию Mapper.Map.В этом нет необходимости, поскольку метод Mapper.Map соответствует ожидаемому определению Select и может напрямую вызывать Mapper.Map.Resharper изменяет его так, что вызывается только 1 метод, и дополнительный метод не генерируется компилятором.

...