转换为方法组 Resharper

发布于 2024-11-28 13:11:13 字数 954 浏览 1 评论 0原文

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

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

转换为方法组。这意味着什么以及应该采取什么措施来消除这种情况。

I have written a method below like this:

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

And for this method, the resharper says:

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

Convert to Method Group. What does this mean and what should be done to get rid of this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

辞取 2024-12-05 13:11:13

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

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

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

What Resharper means is that you can express the ForEach code more simply by using the method group Add.
Example:

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

The method group defined by Add is compatible with the delegate expected by ForEach and hence the C# compiler will take care of doing the conversion. The default in Resharper is to prefer method groups over lambdas and explicit delegate creation statements.

窝囊感情。 2024-12-05 13:11:13

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

JaredPar already provided the correct answer, I just wanted to suggest a simpler implementation of the method:

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();
}
纸短情长 2024-12-05 13:11:13

接受 Resharper 的建议,看看它会带来哪些变化。您随时可以撤消它们。

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

Resharper:变量

Accept Resharper's suggestion to see what changes it makes. You can always undo them.

If you aren't happy with the change and don't want Resharper suggesting it in future then you can disable that specific option - the others will remain available. See the answer here for details.

Resharper: vars

时光无声 2024-12-05 13:11:13

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

您可以检查检查 MSIL 代码,如果您使用方法组,那么它只会创建一个指向该方法的新委托。
但是,如果您使用 lambda 表达式,那么它会生成一个带有匿名方法的类。结果是方法组需要的内存少于 lambda,并且 Resharper 建议您进行优化

From Microsoft website Method group is a set of overloaded methods resulting from a member lookup

You can check inspecting MSIL code that if you use the method group then it just makes a new delegate pointing to that method.
But if you use a lambda expression then it generates a class with anonymous method under the hood. The result is that method group is required less memory then lambda and Resharper suggests you to optimize

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文