Как лямбда-выражения работают внутри?
При поиске ответа на этот вопрос: «Почему выходной параметр не разрешен в анонимном методе?«Я немного заблудился о том, как на самом деле работают лямбда-выражения и анонимные методы.
В комментариях JaredPar заявляет, что «Представьте, например, что параметр out ссылается на локальную переменную в стеке. Лямбда может выполняться в любой произвольной точке в будущем и, следовательно, может выполняться, когда этот кадр стека больше не действителен».
Я указал, не будет ли это так с любой другой переменной ... которая в основном заставляет меня задаться вопросом, что я действительно знаю о лямбда-выражениях.
Вот что я имею в виду:
public void Foo(ComplexObject val, out SomeDelegate outDelegate)
{
ComplexObject obj = new ComplexObject(val)
SomeDelegate = delegate(int other) { return (obj.value * other); }
}
public void Bar()
{
SomeDelegate MyDel = null;
Foo(5, out MyDel);
int finalRes = MyDel(100);
// Whatever
}
В этой ситуации я действительно не знаю, что происходит. obj - это ссылка на стек, которая больше не будет действительной при возврате метода, поэтому анонимный метод должен иметь возможность (если это работает) фактически узнать, что это ссылочный тип, и скопировать ссылку вместо значения, если это так ... почему бы не сработали ref-параметры, если «сценарий использования» более или менее одинаков?