Как передать параметр System.Action с лямбда-выражениями для ForEach?
При попытке использовать лямбда-выражение вместо AddressOf
оператор, с параметром для ForEach
sub я получаю следующую ошибку:
Лямбды-операторы не могут быть преобразованы в деревья выражений
Это AddressOf
код, который работает:
lista.ForEach(new Action(Of String)(AddressOf Console.WriteLine))
Это лямбда-код, который выдает ошибку:
lista.ForEach(new Action(Of String)(Function(x) x = "teste")
Метод ForEach
вызывается так Action
должен быть передан в качестве параметра.
Может кто-нибудь помочь мне с этим или сказать, возможно ли это или нет?
1 ответ
В конечном счете, ваша проблема заключается в следующем:
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)
, Все, на чем вам нужно сосредоточиться, - это Lambda Express, который вы хотите передать, чтобы List/Array выполнялся для каждого элемента.
Внимательно прочитайте, чтобы понять основы Лямбда-выражения VB.
С этим попробуйте этот шаблон вместо:
lista.ForEach(Sub(x) x = "teste")
или же
lista.ForEach(Function(x) x = "teste")