【问题标题】:Convert to Method Group Resharper转换为方法组 Resharper
【发布时间】:2011-10-22 18:08:51
【问题描述】:

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

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

对于这种方法,reshaper 说:

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

转换为方法组。这是什么意思,应该怎么做才能摆脱它。

【问题讨论】:

  • 顺便说一句,你没有去“摆脱这个”:这不是一个警告,只是一个建议。如果您因为发现它更清晰而更愿意保持其当前形式,那么这不是问题。
  • 是的,我知道,但很好奇如何摆脱错误以及方法组是什么。

标签: c# resharper


【解决方案1】:

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

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

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

【讨论】:

  • 感谢 JaredPar 的建议。
  • +1 这是这里唯一试图解释“为什么”的答案。
  • 我看到在函数式编程语言(例如 Haskell)中删除变量的 eta 减少是不同的术语。
【解决方案2】:

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

【讨论】:

  • 感谢您给我详细的答复。
【解决方案3】:

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

如果您对更改不满意并且不希望 Resharper 将来建议它,那么您可以禁用该特定选项 - 其他选项将保持可用。有关详细信息,请参阅此处的答案。

Resharper: vars

【讨论】:

  • 感谢您告诉我一些新消息!
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 2021-06-25
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 2017-09-18
  • 1970-01-01
相关资源
最近更新 更多