2011-08-24 5 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()を行う { //いくつかの作業を行う } 'あなたは3 upvotesを持っていますが、 – RBT

答えて

10

ラムダ式のパラメータを直接Mapper.Mapメソッドに渡すので、このメソッドを直接Selectの投影として指定するのと全く同じです。 Mapper.MapのシグネチャはFunc<TSource, TResult>デリゲートと互換性があるため、R#ではラムダ式ではなくメソッドグループを直接使用することを推奨しています。

+0

私はより多くの質問があります。私は署名がであることを理解していますが、改良されたコードを使用すると何が投影されていますか? .Selectはそれぞれの 'ProductBrand'オブジェクトをバンプアップし、Mapper.MapはそのビットがTSourceであると仮定しますか? –

+1

'brand'は' ProductBrand'のコレクションなので、 'TSource'はすでに知られています。コンパイラは、 'Mapper.Map'の戻り値の型から' TResult'を推論します。 –

3

最初の行は、すぐにMapper.Map関数を呼び出すメソッドを作成します。これは、Mapper.Mapメソッドが期待されるSelectの定義と一致し、Mapper.Mapを直接呼び出すことができるため、不要です。 Resharperは、1つのメソッドだけが呼び出され、余分なメソッドはコンパイラによって生成されないように変更します。

関連する問題