gpt4 book ai didi

c# - 在 Action 上使用局部函数作为输入参数

转载 作者:太空狗 更新时间:2023-10-29 23:12:35 25 4
gpt4 key购买 nike

我有一个接收 Action<string> 的方法(参见下面的简单示例),但在 Action 所在的调用方法中构造完成后,Resharper 建议使用局部函数。

关于使用局部函数代替 Actions 的推荐做法是什么,这重要吗,或者是否有需要注意的问题?

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");
}

最佳答案

带你编码并通过 sharplab.io ,我们可以看到代码被降低为:

public class Class
{
[CompilerGenerated]
private sealed class <>c__DisplayClass0_0
{
public string holder;

internal void <Caller>b__0(string s)
{
this.holder = s;
}

internal void <Caller>g__SetHolder1(string s)
{
this.holder = s;
}
}

public void Caller()
{
Class.<>c__DisplayClass0_0 @object = new Class.<>c__DisplayClass0_0();
Action<string> setHolder = new Action<string>(@object.<Caller>b__0);
this.DoStuff(setHolder);
this.DoStuff(new Action<string>(@object.<Caller>g__SetHolder1));
}

public void DoStuff(Action<string> setHolder)
{
setHolder("holders new string");
}
}

因为actSetHolder都是holder上的闭包,当调用Caller时一个新的闭包类实例创建并为 lambda 和本地函数创建新的 Action 委托(delegate)。因此,两者的结果代码是相同的。

因此,考虑到您在这里使用它们的方式,它只是归结为可读性(正如许多 R# 推荐所做的那样)。局部函数可以说具有更好的语法,因此 R# 建议您以这种方式使用它。

关于c# - 在 Action 上使用局部函数作为输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com