我有以下代码...
namespace ConsoleApplication2
{
public delegate void Task();
class Scheduler
{
private List<Task> tasks = new List<Task>();
public void AddTask(Task myTask)
{
tasks.Add(myTask);
}
public void Start()
{
foreach (var task in tasks)
task();
}
}
class Program
{
static void Main(string[] args)
{
var list = new List<string>() { "A", "B", "C" };
var scheduler = new Scheduler();
foreach (var item in list)
{
scheduler.AddTask(() => { Console.WriteLine(item); });
}
scheduler.Start();
}
}
}
输出是...
C
C
C
但是,如果我将 Main 方法的 foreach 部分更改为:
foreach (var item in list)
{
var i = item;
scheduler.AddTask(() => { Console.WriteLine(i); });
}
我得到以下输出:
A
B
C
我的愚蠢假设是两个程序都应该产生相同的输出。有人可以解释为什么它会这样吗?