Я хотел бы задать вопрос, связанный с тем, что Closures поддерживает локальную переменную на основе двух примеров:
public static Func<int, int> F2()
{
var local = 1;
Func<int, int> inc = delegate (int x)
{
local = local + 1;
return x + local;
};
return inc;
}
Теперь при вызове этого метода корректно работает рабочий механизм Closure
var inc2 = F2();
Console.WriteLine(inc2(10));
Console.WriteLine(inc2(10));
Результаты свывод:
12
13
Теперь, альтернативная версия:
public static Func<int, int> F1 = i =>
{
var local = 1;
Func<int, int> FInn = x =>
{
local++;
return local + x;
};
return FInn(i);
};
Вызов этого:
var inc1 = F1;
Console.WriteLine(inc1(10));
Console.WriteLine(inc1(10));
Отображает сейчас:
12
12
Почему вторая версия работает иначе, чем первая?
спасибо!