使用Array.FindAll方法查找符合条件的子数组

时间:2013-05-17 21:08:58

标签: arrays vb.net delegates visual-studio-2005

我在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))

它说:“预期的表达”

我该如何解决这个问题?

1 个答案:

答案 0 :(得分: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))