Что на самом деле делает этот фрагмент ReSharper 'convert to method group'?
код до изменения:
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 метод, а дополнительный метод не генерируется компилятором.