无法在lambda表达式中使用ref或out参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

为什么不能在lambda表达式中使用ref或out参数?

下面是一个简单的例子:

private void Foo()
{
    int value;
    Bar(out value);
}

private void Bar(out int value)
{
    value = 3;
    int[] array = { 1, 2, 3, 4, 5 };
    int newValue = array.Where(a => a == value).First();
}
提问于
用户回答回答于

因为在方法帧不再在堆栈上之后可以访问它的值。

Func<int> Example(int p1) {
  return () => p1;
}

捕获变量的另一个属性是,对变量的更改在lambda表达式之外也是可见的。例如

void Example2(int p1) {
  Action del = () => { p1 = 42; }
  del();
  Console.WriteLine(p1);
}
用户回答回答于

因为它们不是捕获的变量:

delegate void TestDelegate (out int x);
static void Main(string[] args)
{
    TestDelegate testDel = (out int x) => { x = 10; };
    int p;
    testDel(out p);
    Console.WriteLine(p);
}

扫码关注云+社区