Как передать параметр 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")
Другие вопросы по тегам