ReSharper 2025.2 Help

代码检查:将 lambda 表达式转换为方法组

对于委托,方法组提供了一种简单的语法来将方法分配给委托变量。 此语法不需要显式调用委托的构造函数。 方法组允许使用方法的重载。 要调用哪个重载由委托的签名决定。

如果匿名函数(表达式 lambda 或匿名方法)仅包含一个方法,则可以将其转换为方法组,以实现更紧凑的语法并防止使用 lambda 导致的编译时开销。 以下 另请参阅 中的链接提供了有关 lambda 表达式和方法组之间一般差异的详细信息。 编译后,在性能方面也可能存在差异,但这在很大程度上取决于具体场景——请参阅 StackOverflow 上的此评论

ReSharper 提供了一种快速修复,替换 lambda 表达式为方法组 Console.WriteLine

internal static class DelegateTest { private delegate void MethodDelegate(string message); public void Main(string[] args) { MethodDelegate mymethod = message => { Console.WriteLine(message); }; mymethod("test"); Console.ReadLine(); } }
internal static class DelegateTest { private delegate void MethodDelegate(string message); public void Main(string[] args) { MethodDelegate mymethod = Console.WriteLine; mymethod("test"); Console.ReadLine(); } }

下一个示例显示了此快速修复应用于匿名方法的情况:

internal class DelegateTest { private delegate void MethodDelegate(string message); public static void Main(string[] args) { MethodDelegate mymethod = delegate(string message) { Console.WriteLine(message); }; mymethod("test"); Console.ReadLine(); } }
internal class DelegateTest { private delegate void MethodDelegate(string message); public static void Main(string[] args) { MethodDelegate mymethod = Console.WriteLine; mymethod("test"); Console.ReadLine(); } }
最后修改日期: 2025年 9月 27日