Vb.net 如何通过ForEach的lambda表达式传递System.Action参数?
当尝试使用lambda表达式而不是Vb.net 如何通过ForEach的lambda表达式传递System.Action参数?,vb.net,lambda,foreach,compiler-errors,uipath,Vb.net,Lambda,Foreach,Compiler Errors,Uipath,当尝试使用lambda表达式而不是AddressOf运算符时,使用ForEachsub的参数,我得到以下错误: 语句lambda无法转换为表达式树 这是代码的地址,它可以工作: lista.ForEach(new Action(Of String)(AddressOf Console.WriteLine)) 这是产生错误的lambda代码: lista.ForEach(new Action(Of String)(Function(x) x = "teste") 正在调用方法ForEach,因
AddressOf
运算符时,使用ForEach
sub的参数,我得到以下错误:
语句lambda无法转换为表达式树
这是代码的地址,它可以工作:
lista.ForEach(new Action(Of String)(AddressOf Console.WriteLine))
这是产生错误的lambda代码:
lista.ForEach(new Action(Of String)(Function(x) x = "teste")
正在调用方法ForEach
,因此需要将操作
作为参数传递
有人能帮我吗?或者告诉我这是否可能吗?最终,你的问题是:
lista.ForEach(new Action(Of String)(Function(x) x = "teste")
ForEach
是一种不返回操作结果值的方法
将其更改为:
lista.ForEach(new Action(Of String)(Sub(x) x = "teste"))
尽管我一点也不喜欢该方法签名,但您将需要执行的操作复杂化了
考虑到ForEach方法()接受操作
,因此无需声明新操作(字符串)
。您只需要关注希望传递给每个元素执行的列表/数组的Lambda Express
良好的阅读理解基础知识
因此,请尝试以下模式:
lista.ForEach(Sub(x) x = "teste")
或
lista.ForEach(新操作(字符串)(Sub(x)x=“teste”)
谢谢Fabio,但我得到了相同的编译错误。“语句lambda…”下一行将编译ok->lista.ForEach(新操作(字符串)(Sub(值)Console.WriteLine(值)))
。因此,您甚至可以删除新操作…
并将lambda传递到那里:lista.ForEach(Sub(value)Console.WriteLine(value))
当我使用控制台时,lista的类型是什么。WriteLine(变量)
它工作得很好,我已经能够像那样使用它了。但是当我试图用变量variable=“teste”
执行一些过程时,我得到了错误。lista
是一个列表
类型:TypeSystem.Collections.Generic.List`1[[System.String,mscorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089]]
lista.ForEach(Function(x) x = "teste")