我念叨lambda表达式,我已经看到了这个例子,lambda表达式如何共享局部变量?
例1:
static Func<int> Natural()
{
int seed = 0;
return() => seed++; // Returns a closure
}
static void Main()
{
Func<int> natural = Natural();
Console.WriteLine (natural()); // output : 0
Console.WriteLine (natural()); // output : 1
}
例2:
static Func<int> Natural()
{
return() => { int seed = 0; return seed++; };
}
static void Main()
{
Func<int> natural = Natural();
Console.WriteLine (natural()); // output : 0
Console.WriteLine (natural()); // output : 0
}
我无法理解为什么第一个例子输出为0和1.
第二个e xample在匿名函数的作用域中包含'seed'变量(因此每次运行时都将其设置为0)。第一个版本的seed变量声明在该范围之外。 – Mike