在C#中关闭循环变量

时间:2012-03-08 22:26:48

标签: c# .net foreach syntactic-sugar

this发帖后,我被告知下面的代码部分遭受了“关闭循环变量的令人震惊的行为。”

    foreach (Canidate canidate in allCanidates)
    {
        Thread newThread = new Thread(delegate()
        {
            BusyWait(canidate);
        });

        newThread.Start();
    }

我把它改为:

foreach (Canidate canidate in allCanidates)
        {
            var can = canidate;
            Thread newThread = new Thread(delegate()
            {                 
                BusyWait(can);
            });

            newThread.Start();
        }

但我的老板一直坚持认为它会遭遇同样的问题。我使用this链接尝试解决此问题。有人可以帮我正确解决问题,以便我的代码能够正确执行。这个问题对我来说都是新的,我不确定我是否完全理解它。

1 个答案:

答案 0 :(得分:4)

关闭后来更改值的变量是导致问题的原因。

  • candidate更改了循环周围的每一圈“ 会导致问题。
  • can是围绕循环每次“圈”创建的,永远不会更改,不会导致问题。