2011-08-24 63 views
8

enter image description here這是什麼ReSharper片段「轉換爲方法組」實際上在做什麼?

修改之前代碼:

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

代碼改進後:

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

這是什麼做的?它是否隱式地在brands集合中的每個項目上運行該映射?

+0

我也面臨着同樣的問題,我下面的代碼,同時瞭解TPL: '私有靜態無效ParallelForEach() { Parallel.Invoke(()=>方法1(), ()=>方法2( )); } 私有靜態無效方法1(){ // 做一些工作 } 私有靜態無效方法2(){ // 做一些工作 }' – RBT

回答

10

由於您直接將lambda表達式的參數傳遞給Mapper.Map方法,因此它完全等效於將此方法直接指定爲Select的投影。 Mapper.Map的簽名與Func<TSource, TResult>代表兼容,因此R#建議直接使用方法組而不是lambda表達式。

+0

你有三個upvotes但我有更多的問題。 :)我瞭解簽名是但是當我使用改進的代碼時正在投影什麼? .Select是否打開每個ProductBrand對象,並且Mapper.Map假定該位是TSource? –

+1

好吧,'TSource'已經是衆所周知的了,因爲'brands'是'ProductBrand'的集合。編譯器從'Mapper.Map'的返回類型中推斷'TResult'。 –

3

第一行創建一個立即調用Mapper.Map函數的方法。這是不必要的,因爲Mapper.Map方法與Select的預期定義相匹配,並且可以直接調用Mapper.Map。 Resharper對其進行更改,以便僅調用1個方法,並且編譯器不會生成額外的方法。

相關問題