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 回答