转换为方法组Resharper

Sai*_*and 28 c# resharper

我在下面写了一个像这样的方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

对于这种方法,resharper说:

validEmpowerTaxViews.ToList().ForEach(delegate(EmpowerTaxView etv)
{
    result.Add(etv);   
});
Run Code Online (Sandbox Code Playgroud)

转换为方法组.这意味着什么,应该做些什么来摆脱这个.

Jar*_*Par 63

Resharper的含义是您可以ForEach使用方法组更简单地表达代码Add.例:

validEmpowerTaxViews.ToList().Foreach(result.Add);
Run Code Online (Sandbox Code Playgroud)

定义的方法组Add与期望的委托兼容,ForEach因此C#编译器将负责转换.Resharper中的默认设置是优先于lambda和显式委托创建语句的方法组.

  • +1这是试图解释"为什么"的唯一答案. (8认同)

Tho*_*que 6

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();
}
Run Code Online (Sandbox Code Playgroud)


Sco*_*nro 6

接受Resharper的建议,看看它做了什么改变.您可以随时撤消它们.

如果您对此更改不满意并且不希望Resharper将来建议它,那么您可以禁用该特定选项 - 其他选项仍然可用.详情请参阅此处的答案.

Resharper:vars