2017-01-19 12 views
0

При попытке использовать лямбда-выражение вместо оператора AddressOf с параметром для ForEach подразделам я получаю следующее сообщение об ошибке:Как передать параметр System.Action с лямбда-выражениями для ForEach?

Statement lambdas cannot be converted to expressions trees

Это AddressOf код, который работает:

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

Это код лямбда, который производит ошибку:

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

метод 012 Вызывается, поэтому в качестве параметра необходимо передать Action.

Может ли кто-нибудь помочь мне с этим или сказать мне, возможно ли это или нет?

+2

'lista.ForEach (новое действие (Of String) (Sub (х) = х "Teste")' – Fabio

+0

Спасибо Фабио, но я получаю то же компиляции ERR или. «Statement lambda ...» – brunoazev

+0

Следующая строка будет компилировать ok -> 'lista.ForEach (новое действие (Of String) (Sub (значение) Console.WriteLine (значение)))'. Таким образом, вы даже можете удалить «новое действие ...» и передать там только lambda: 'lista.ForEach (Sub (значение) Console.WriteLine (значение))' – Fabio

ответ

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). Все, что вам нужно сосредоточиться на это Lambda Экспресс вы хотите передать в список/массив для выполнения для каждого элемента

хорошо читать, чтобы понять основы VB's Lambda Expression Implementation

с этим, попробуйте этот шаблон вместо:

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

или

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

 Смежные вопросы

  • Нет связанных вопросов^_^