如果我将以下代码看作Javascript代码,那么它会有意义......但是,它如何在Main中的call action()不为我产生一个NullReferenceException? Action是否抓取了像JavaScript一样的东西?感谢所有人。C#中是否存在“Javascript上下文”这样的事情?
public class Program
{
static void Main(string[] args)
{
var p = new Program();
var action = p.method();
action();
Console.ReadKey();
}
public Action method()
{
var i = 6;
Action action =() => Console.WriteLine(i);
i++;
return action;
}
}
OUTPUT >> 7
您正在寻找的词是'闭包',而不是上下文。如果您搜索“C#closure”,那么关于该主题的信息有相当多的信息,但实质上,'i'从'method'中提取到其闭包中,这允许它在离开“method”的范围后保留。 – Rob