3

Visual Basic.Net のアプリケーションがあり、特定の条件を満たす配列内のすべての要素を検索する必要があります。

Dim result As my_obj() = Array.FindAll(lstData, HasToBeSent)

関数HasToBeSentは次のように定義されています。

Private Function HasToBeSent(ByVal cta As my_obj) As Boolean
    Return cta.IsSent
End Function

ただし、これはコンパイルされません。パラメーターの引数を指定していませんと表示されctaますPrivate Function HasToBeSent(ByVal cta As my_obj) As Boolean

Visual Studio 2005 を使用しているため、VB.Net 8.0 を使用しています。推奨される答えは、VB.Net の上位バージョン向けだと思います。前のコードを

Dim result As my_obj() = Array.FindAll(lstData, Function(cta) HasToBeSent(cta))

「式が必要です」と書かれています

どうすればこれを解決できますか?

4

1 に答える 1

4

定義は保持しますHasToBeSentが、キーワードを追加しSharedて静的にします (実際、これはおそらくオプションですが、このコードはクラス内の他のものに依存していないため、設計上の決定としてはおそらく適切です)。

Private Shared Function HasToBeSent(ByVal cta As my_obj) As Boolean
    Return cta.IsSent
End Function

次に、Array.FindAll()関数の「アドレス」を指定します。

Array.FindAll(lstData, AddressOf HasToBeSent)

新しいバージョンの VB にアップグレードすると、デリゲートをインライン化できます。

Array.FindAll(lstData, Function(cta) cta.IsSent)

HasToBeSent関数を保持するには、代わりにそれを呼び出すだけです。

Array.FindAll(lstData, Function(cta) HasToBeSent(cta))
于 2013-05-17T21:14:33.513 に答える