Что на самом деле делает этот фрагмент ReSharper 'convert to method group'?

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 ответов


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


первая строка создает метод, который немедленно вызывает Сопоставитель.Функция карты. Это не нужно, так как картограф.Метод Map соответствует ожидаемому определению Select и может вызывать Mapper.Карта напрямую. Resharper изменяет его так, что вызывается только 1 метод, а дополнительный метод не генерируется компилятором.