2011-08-24 5 views
8

enter image description hereTrích đoạn 'Chuyển đổi thành nhóm phương thức' của ReSharper 'thực sự đang làm gì?

Mã trước khi thay đổi:

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

Mã sau khi cải tiến:

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

được này làm gì vậy? Có ngầm chạy bản đồ đó trên mọi mục trong bộ sưu tập brands không?

+0

Tôi cũng phải đối mặt với cùng một vấn đề với mã dưới đây của tôi trong khi sự hiểu biết TPL: 'private static void ParallelForEach() { Parallel.Invoke (() => Method1(), () => Method2 ()); } private static void Method1() { // làm một số công việc } private static void Method2() { // làm một số công việc } ' – RBT

Trả lời

10

Vì bạn đang trực tiếp chuyển tham số của biểu thức lambda đến phương thức Mapper.Map, nó chính xác tương đương với việc chỉ định phương pháp này trực tiếp làm phép chiếu cho Select. Chữ ký của Mapper.Map tương thích với các đại biểu Func<TSource, TResult>, vì vậy R # đề xuất sử dụng nhóm phương pháp trực tiếp thay vì biểu thức lambda.

+0

Bạn có ba upvotes nhưng tôi có thêm thắc mắc . :) Tôi hiểu chữ ký là nhưng những gì đang được chiếu khi tôi sử dụng mã được cải thiện? Liệu các .Select burp lên mỗi 'ProductBrand' đối tượng và Mapper.Map giả định rằng bit là TSource? –

+1

Vâng, 'TSource' đã được biết, vì' thương hiệu' là tập hợp 'ProductBrand'. Trình biên dịch đưa vào 'TResult' từ kiểu trả về' Mapper.Map'. –

3

Dòng đầu tiên tạo phương thức gọi ngay chức năng Mapper.Map. Điều này là không cần thiết vì phương thức Mapper.Map khớp với định nghĩa mong muốn của Select và có thể gọi trực tiếp Mapper.Map. Resharper thay đổi nó để chỉ có 1 phương thức được gọi và phương thức bổ sung không được trình biên dịch tạo ra.