为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
紫衣仙女 2019-10-08 14:37:39
为什么不能在lambda表达式中使用ref或out参数?我今天遇到了错误,找到了解决方法,但我仍然很好奇为什么这是编译时错误。CS1628:无法在匿名方法,lambda表达式或查询表达式中使用ref或out参数'parameter'这是一个简单的例子: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();}
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

Lambda具有改变它们捕获的变量的生存期的外观。例如,以下lambda表达式使参数p1的生存期超过当前方法框架,因为在方法框架不再位于堆栈上之后可以访问其值


Func<int> Example(int p1) {

  return () => p1;

}

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


void Example2(int p1) {

  Action del = () => { p1 = 42; }

  del();

  Console.WriteLine(p1);

}

这两个属性产生一组特定的效果,这些效果以下列方式在ref参数的前面飞行


ref参数可能具有固定的生存期。考虑将局部变量作为ref参数传递给函数。

lambda中的副作用需要在ref参数本身上可见。在方法内和在调用方中。

这些属性在某种程度上是不兼容的,并且是lambda表达式中不允许使用它们的原因之一。


查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 1314 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信