2017-01-19 14 views
0

ForEachサブのためのパラメータを指定して、私は次のエラーを取得しています、代わりにAddressOfオペレータのラムダ式を使用しようとしている:ForEachのラムダ式でSystem.Actionパラメータを渡す方法は?

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

Statement lambdas cannot be converted to expressions trees

この作品AddressOfコードであり、

これはエラーを生成するラムダコードです:

方法ForEachが呼び出され、Actionをパラメータとして渡す必要があります。

誰でもこれを手伝ったり、可能かどうかを教えてもらえますか?

+2

'lista.ForEach列の(新しいアクション()(サブ(x)はx = "精巣")' – Fabio

+0

はあなたにファビオをありがとう、私は同じコンパイルERRを取得しますまたは。 "ステートメントラムダ..." – brunoazev

+0

次の行は、ok - > 'lista.ForEach(新しいアクション(文字列)(Sub(value)Console.WriteLine(value)))'をコンパイルします。したがって、あなたは '新しいAction ... 'を取り除いてlambdaだけをそこに渡すこともできます:' lista.ForEach(Sub(value)Console.WriteLine(value)) ' – 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)を宣言する必要はありません。

:あなたが集中する必要があるのはあなたの代わりにこのパターンを試し、そのことを基本 VB's Lambda Expression Implementation

を理解するために、各要素

グッド読むために実行するためのリスト/アレイのために渡したいラムダエクスプレスです

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

または

lista.ForEach(Function(x) x = "teste") 
関連する問題