【发布时间】:2010-11-24 20:10:22
【问题描述】:
为什么不能在 lambda 表达式中使用 ref 或 out 参数?
我今天遇到了这个错误并找到了解决方法,但我仍然很好奇为什么这是一个编译时错误。
CS1628: 不能在匿名方法、lambda 表达式或查询表达式中使用 in 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();
}
【问题讨论】:
-
这是关于迭代器的,但这篇文章中的大部分推理(同样由 Eric Lippert 撰写,毕竟他是语言设计团队的成员)适用于 lambda:blogs.msdn.com/ericlippert/archive/2009/07/13/…>
-
请问您找到的解决方法是什么?
-
您可以声明一个局部普通变量并使用它,然后将结果分配给 value... 添加一个 var tempValue = value;然后使用 tempValue。