gpt4 book ai didi

c# - 在 for 循环中用匿名方法闭包

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:36 28 4
gpt4 key购买 nike

我正在尝试理解闭包,已经阅读了一些 Material 但是..然后我尝试了这个。

据我所知,生成了一个包含特定匿名方法(在我的例子中是写入控制台的方法)和 int 变量 j 的类。它如何将所有 j 值存储在一个类中?是否有很多此类在幕后生成的实例?

class Program
{
public static List<Action> actions = new List<Action>();

static void Main(string[] args)
{
AddActions(10);

actions[0]();

actions[1]();

Console.ReadLine();
}

public static void AddActions(int count)
{
for (int i = 0; i < count; i++)
{
int j = i;
actions.Add(delegate()
{
Console.Write("{0} ", j);
});
}
}
}

结果:0 1

最佳答案

这是反编译为类而不是 lambda 的代码。

private class Program
{
public static List<Action> actions;

static Program()
{
Program.actions = new List<Action>();
}

private static void Main(string[] args)
{
Program.AddActions(10);
Program.actions[0]();
Program.actions[1]();
Console.ReadLine();
}

public static void AddActions(int count)
{
for (int index = 0; index < count; ++index)
{
Program.\u003C\u003Ec__DisplayClass2_0 cDisplayClass20 = new Program.\u003C\u003Ec__DisplayClass2_0();
cDisplayClass20.j = index;
Program.actions.Add(new Action((object)cDisplayClass20, __methodptr(\u003CAddActions\u003Eb__0)));
}
}

private sealed class \u003C\u003Ec__DisplayClass2_0
{
public int j;

public \u003C\u003Ec__DisplayClass2_0()
{
base.\u002Ector();
}

internal void \u003CAddActions\u003Eb__0()
{
Console.Write("{0} ", (object)this.j);
}
}
}

如您所见,例如循环迭代,您将获得 new Program.\u003C\u003Ec__DisplayClass2_0(); 的新实例。

关于c# - 在 for 循环中用匿名方法闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741336/

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