代码检查:将委托变量转换为局部函数
局部函数与 lambda 或委托不同,不会引起额外的开销,因为它们本质上是常规方法。 例如,实例化和调用委托需要编译器生成额外的成员,从而导致一些内存开销。 局部函数的另一个好处是它们支持常规方法中允许的所有语法元素。 如果可以用局部函数替换委托,ReSharper 会建议这样做。
请考虑一个用户定义委托的示例。 ReSharper 将委托变量 mymethod 替换为局部函数 Mymethod。 替换后,它还建议移除未使用的委托 MethodDelegate。
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();
}
}
class DelegateTest
{
public static void Main(string[] args)
{
void Mymethod(string message)
{
Console.WriteLine(message);
}
Mymethod("test");
Console.ReadLine();
}
}
在另一个示例中,ReSharper 将泛型委托 Func 替换为局部函数:
class ConvertToLambda
{
public static int ConvertTest()
{
Func<int, int, int> sum = delegate(int x, int y)
{
return x + y;
};
return sum(10, 20);
}
}
class ConvertToLambda
{
public static int ConvertTest()
{
int Sum(int x, int y)
{
return x + y;
}
return Sum(10, 20);
}
}
最后修改日期: 2025年 9月 27日