我创建了一个委托列表,并为变量i
的每个值添加了以下匿名委托:
delegate {Console.WriteLine(i); }
我希望它能打印3次十次,因为在调用每个代表时,我将3作为参数传递。但是,它要打印10十次。
以下是代码:
using System;
using System.Collections.Generic;
namespace ConsoleApplication
{
public class Program
{
static void Main(string[] args)
{
ShowUsingDelegates();
Console.ReadLine();
}
delegate void MyDelegate(int i);
static void ShowUsingDelegates()
{
var myDelegates = new List<MyDelegate>();
for (int i = 0; i < 10; i++)
{
myDelegates.Add(delegate {Console.WriteLine(i); });
}
foreach (var a in myDelegates)
{
a.Invoke(3);
}
}
}
}
答案 0 :(得分:3)
您的委托正在捕获变量i
,该变量在循环后将为10。您忽略了委托的参数(本例中为3)。您还在委托声明中将此参数命名为i
,但是在创建新的委托实例时忽略它并不重要。
尝试以下方法:
myDelegates.Add(delegate(int x) { Console.WriteLine(x); });