代码:
List<Action> actions = new List<Action>();
List<string> names = new List<string>();
foreach (var name in names)
{
actions.Add(() =>
{
doSomething(name);
});
}
这样循环添加之后,发现actions里面添加的都是同一个方法,处理的都是同一个name,比如李雷,所有的行为都变为doSomething(“李雷”)
求问各位大师这是咋回事捏?循环只能创建同一个委托??
楼上正解,这个和延迟执行一个样子。
多谢
问题根源在于滞后执行。
问题原因是:
编译器对于 匿名方法引用的变量 创建引用(比如_name)防止它们的生命周期早结束。
_name指向name的位置。
在滞后执行时,通过_name找到name位置,并找到当前指向的变量值。
谢谢