web-dev-qa-db-ja.com

メソッドグループに再変換

私はこのように以下のメソッドを書きました:

internal static IList<EmpowerTaxView> GetEmpowerTaxViewsByLongAgencyAndAgencyTaxTypes(
   IList<EmpowerCompanyTaxData> validEmpowerCompanyTaxDatas,
   IList<EmpowerTaxView> empowerTaxViews)
{
    IList<EmpowerTaxView> result = new List<EmpowerTaxView>();

    foreach (EmpowerCompanyTaxData empowerCompanyTaxData in validEmpowerCompanyTaxDatas)
    {
         IList<EmpowerTaxView> validEmpowerTaxViews =
           GetEmpowerTaxViewsByLongAgencyAndTaxType(
             empowerCompanyTaxData, empowerTaxViews);

         validEmpowerTaxViews.ToList().ForEach(delegate(EmpowerTaxView etv)
         {
              result.Add(etv);   
         });   
    }

    return result;
}

そして、この方法では、リシャーパーは言う:

validEmpowerTaxViews.ToList().ForEach(delegate(EmpowerTaxView etv)
{
    result.Add(etv);   
});

メソッドグループに変換します。これは何を意味し、これを取り除くために何をすべきか。

28
SaiBand

JaredParはすでに正しい答えを提供しています。私はメソッドのより単純な実装を提案したかっただけです。

internal static IList<EmpowerTaxView> GetEmpowerTaxViewsByLongAgencyAndAgencyTaxTypes(
    IList<EmpowerCompanyTaxData> validEmpowerCompanyTaxDatas,
    IList<EmpowerTaxView> empowerTaxViews)
{
    var results =
        from empowerCompanyTaxData in validEmpowerCompanyTaxDatas
        from etv in GetEmpowerTaxViewsByLongAgencyAndTaxType(
            empowerCompanyTaxData, empowerTaxViews)
        select etv;
    return results.ToList();
}
6
Thomas Levesque

Resharperが意味することは、メソッドグループForEachを使用すると、Addコードをより簡単に表現できるということです。例:

validEmpowerTaxViews.ToList().Foreach(result.Add);

Addで定義されたメソッドグループは、ForEachで期待されるデリゲートと互換性があるため、C#コンパイラが変換を行います。 Resharperのデフォルトでは、ラムダや明示的なデリゲート作成ステートメントよりもメソッドグループが優先されます。

62
JaredPar

Resharperの提案を受け入れて、変更内容を確認します。いつでも元に戻すことができます。

変更に満足しておらず、Resharperが将来の提案を望まない場合は、その特定のオプションを無効にすることができます。他のオプションは引き続き使用できます。詳細はこちらの回答をご覧ください。

Resharper:vars

6
Scott Munro