我在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))
它说:“预期的表达”
我该如何解决这个问题?
答案 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))