相关疑难解决方法(0)

65
推荐指数
1
解决办法
7万
查看次数

如何告诉lambda函数捕获副本而不是C#中的引用?

我一直在学习C#,我正在努力理解lambdas.在下面的示例中,它打印出10次.

class Program
{
    delegate void Action();
    static void Main(string[] args)
    {
        List<Action> actions = new List<Action>();

        for (int i = 0; i < 10; ++i )
            actions.Add(()=>Console.WriteLine(i));

        foreach (Action a in actions)
            a();
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,lambda后面生成的类正在存储一个引用int i变量的引用或指针,并且每次循环迭代时都会为同一个引用分配一个新值.有没有办法强制lamda获取副本,比如C++ 0x语法

[&](){ ... } // Capture by reference
Run Code Online (Sandbox Code Playgroud)

[=](){ ... } // Capture copies
Run Code Online (Sandbox Code Playgroud)

c# lambda loops capture

27
推荐指数
4
解决办法
2万
查看次数

标签 统计

c# ×2

capture ×1

closures ×1

lambda ×1

loops ×1