相关疑难解决方法(0)

C#中循环中的捕获变量

我遇到了一个关于C#的有趣问题.我有如下代码.

List<Func<int>> actions = new List<Func<int>>();

int variable = 0;
while (variable < 5)
{
    actions.Add(() => variable * 2);
    ++ variable;
}

foreach (var act in actions)
{
    Console.WriteLine(act.Invoke());
}
Run Code Online (Sandbox Code Playgroud)

我希望它输出0,2,4,6,8.但是,它实际输出5个10.

似乎是由于所有操作都涉及一个捕获的变量.结果,当它们被调用时,它们都具有相同的输出.

有没有办法解决这个限制,让每个动作实例都有自己的捕获变量?

c# closures captured-variable

202
推荐指数
7
解决办法
5万
查看次数

代码块之前和之后的执行方法

如何在括号中包含一些代码来执行以下操作?

MyCustomStatement(args){
// code goes here
}
Run Code Online (Sandbox Code Playgroud)

因此,在括号中的代码执行之前,它将调用一个方法,当括号中的代码完成执行时,它将调用另一个方法.有这样的事吗?我知道当我可以简单地在代码之前和之后调用方法时,这样做似乎是多余的,但我只是很好奇.我不知道怎么说这个,因为我是编程的新手.

谢谢!

.net c#

4
推荐指数
1
解决办法
2438
查看次数

标签 统计

c# ×2

.net ×1

captured-variable ×1

closures ×1