在查找这个问题的答案时:“为什么匿名方法中不允许使用 out 参数? ”我对 lambda 表达式和匿名方法的实际工作方式有点迷茫。
JaredPar 在评论中指出“例如,假设 out 参数引用堆栈上的局部变量。lambda 可以在将来的任意点执行,因此可以在该堆栈帧不再有效时执行”。
我指出如果任何其他变量都不是这种情况......这基本上让我想知道我对 lambda 表达式真正了解什么。
我想到的是这样的:
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 params 不起作用?