【发布时间】:2010-12-10 22:35:49
【问题描述】:
在查找这个问题的答案时:“Why is an out parameter not allowed within an anonymous method?”我对 lambda 表达式和匿名方法实际上是如何工作的有点迷茫。
在 cmets 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 不起作用?
【问题讨论】:
标签: c# lambda anonymous-methods