转换为方法组Resharper

本文关键字:Resharper 方法 转换 | 更新日期: 2023-09-27 18:04:46

我在下面写了一个方法:

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;
}

对于这个方法,resharper说:

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

转换为方法组。这是什么意思,应该做些什么来摆脱这个

转换为方法组Resharper

Resharper的意思是您可以通过使用方法组Add来更简单地表达ForEach代码。例子:

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

Add定义的方法组与ForEach期望的委托兼容,因此c#编译器将负责进行转换。Resharper默认使用方法组,而不是lambda和显式委托创建语句。

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();
}

接受Resharper的建议,看看它做了什么改变。你可以随时撤销它们。

如果你对这个改变不满意,并且不希望Resharper在将来建议这样做,那么你可以禁用这个特定的选项——其他选项仍然可用。详情请看这里的答案。

Resharper: var

来自Microsoft网站Method group是由成员查找产生的一组重载方法

你可以检查MSIL代码,如果你使用method group,那么它只是使一个新的委托指向那个方法。但是如果你使用lambda expression,那么它会在底层生成一个带有匿名方法的类。结果是方法组需要的内存比lambda少,Resharper建议你优化