代码检查:将 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日