我一直在看這段代碼。我意識到,爲什麼這總會拋出不支持的觀點,因爲溫度總是等於20;然而,我希望有人向我解釋爲什麼temp總是等於20,而不是在循環中設置爲temp的值。有人可以向我解釋爲什麼這不起作用嗎?
{
delegate int Del(int i);
static event Del MyEvent;
static void Main(string[] args)
{
for (int i = 0; i < 20; i++)
MyEvent += a =>
{
int temp = i;
if (a != temp) throw new NotSupportedException();
return a * 2;
};
Console.WriteLine("C'est fini");
Console.WriteLine(GetValue(5));
Console.ReadLine();
}
static int GetValue(int arg)
{
foreach(Del myEvent in MyEvent.GetInvocationList())
{
try
{
return myEvent(arg);
}
catch(NotSupportedException)
{
continue;
}
}
throw new NotSupportedException();
}
}
這是因爲封鎖和它已經回答得非常好這裏http://stackoverflow.com/questions/5438307/detailed-explanation-of-variable-capture-in-closures – BenCr
是因爲總是不等於我所以它是拋出異常,而不是它的返回聲明? – Ronnie
@BenCr謝謝!我不知道它叫什麼,我爲重複道歉。我正在閱讀你鏈接的問題。 – Aelphaeis