转换为方法组 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;
}
对于这个方法,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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Resharper 的意思是,您可以通过使用方法组
Add
更简单地表达ForEach
代码。示例:
Add
定义的方法组与ForEach
所需的委托兼容,因此 C# 编译器将负责执行转换。 Resharper 中的默认设置是优先选择方法组而不是 lambda 和显式委托创建语句。What Resharper means is that you can express the
ForEach
code more simply by using the method groupAdd
.Example:
The method group defined by
Add
is compatible with the delegate expected byForEach
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.JaredPar 已经提供了正确的答案,我只是想建议该方法的更简单的实现:
JaredPar already provided the correct answer, I just wanted to suggest a simpler implementation of the method:
接受 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
来自 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