0

当尝试使用 lambda 表达式而不是AddressOf运算符时,带有ForEachsub 的参数,我收到以下错误:

语句 lambda 不能转换为表达式树

这是AddressOf有效的代码:

lista.ForEach(new Action(Of String)(AddressOf Console.WriteLine))

这是产生错误的 lambda 代码:

lista.ForEach(new Action(Of String)(Function(x) x = "teste")

ForEach正在调用该方法,因此Action需要将其作为参数传递。

谁能帮助我或告诉我这是否可能?

4

1 回答 1

0

最终,您的问题是:

lista.ForEach(new Action(Of String)(Function(x) x = "teste")

ForEach是一个不作为操作结果返回值的方法。

将其更改为:

lista.ForEach(new Action(Of String)(Sub(x) x = "teste"))

虽然,我根本不喜欢该方法签名,但您需要执行的此操作过于复杂。

考虑到 ForEach 方法 ( MSDN ) 接受Action<T>,无需声明new Action(of String)。您只需要关注您希望传递给 List/Array 以对每个元素执行的 Lambda Express

良好阅读以了解VB 的 Lambda 表达式实现的基础知识

有了这个,试试这个模式:

lista.ForEach(Sub(x) x = "teste")

或者

lista.ForEach(Function(x) x = "teste")
于 2017-07-19T18:04:35.910 回答