我有一个方法正在采用Action<string>
(请参阅下面的简单示例),但在构建Action
的调用方法中,Resharper建议本地函数应该使用。使用局部函数作为输入参数
围绕使用本地函数代替动作推荐的做法是什么,这有什么重要的,或者是否有需要注意的陷阱?
public void Caller()
{
string holder;
Action<string> act = s => holder = s;
void SetHolder(string s) => holder = s;
DoStuff(act);
DoStuff(SetHolder);
}
public void DoStuff(Action<string> setHolder)
{
setHolder("holders new string");
}
您的回答让我更加好奇,因为我读过[这里](https://www.danielcrabtree.com/blog/84/c-sharp-7-local-functions-are-funcs-too),如果本地函数是静态的,除非它访问'this',否则它们是实例方法。我在sharplab.io中创建了一个替代示例(请参阅下一个评论,因为链接太长了)(我不知道sharplab到现在为止),它在“Action”周围添加了一些“null”检查,但不是本地功能。你能否详细说明这种差异? – Ayb4btu
[替代示例](https://sharplab.io/#v2:CYLg1APgAgDABFAjAbgLACgoGYECY4DCcA3hnOQjlACyECGANgwKYBOAFAJQanoUKJcAHiQwAfHDoBjAC5wAvHADOCiUgCc7JZzR8KNOAGVmMgBIB7BsDbtRyzqoGbtushQAi5wzICuAMz92aRkdN3JPb39A4zNLa1ZQ9ABfDAxsBFoI3wDbQRFEcWUTCys2bnRefiViuJsAImAASyUABwY6AE84RoA7OClzHqVLZjrElOSgA===)使用什么相当于一个'静态Action'和局部功能。 – Ayb4btu
我想我点了为什么有空检查。 “Action”是一个变量,可以为null,而本地函数由于缺乏正确的术语,因此不需要检查null的语法容器,因为它不能被检查为null,本质上是空的。 – Ayb4btu