Как лямбда-выражения работают внутри?

При поиске ответа на этот вопрос: «Почему выходной параметр не разрешен в анонимном методе?«Я немного заблудился о том, как на самом деле работают лямбда-выражения и анонимные методы.

В комментариях 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-параметры, если «сценарий использования» более или менее одинаков?

Ответы на вопрос(2)

Ваш ответ на вопрос