Встроенный предикат делегата VB.NET не работает - PullRequest
0 голосов
/ 27 января 2012

Это моя проблема.Если я напишу это -

Private ListValue As Object = Nothing

Private Sub FindIndex(ByVal e As ListBoxFindItemArgs)
    e.IsFound = Object.Equals(ListValue, e.ItemValue)
End Sub

Private Sub SearchValues
    ListValue  = 5
    Index = Me.lst_department.FindItem(0, True, AddressOf FindIndex)
End Sub

Но я просто не в себе, почему этот код, написанный для того же, не работает -

Private Sub SearchValues
    ListValue  = 5
    Index = Me.lst_department.FindItem(0, True, Function(e As ListBoxFindItemArgs) e.IsFound = Object.Equals(ListValue, e.ItemValue))
End Sub

1 Ответ

4 голосов
/ 27 января 2012

Поскольку ваш «предикат» , а не функция 1 , это Sub. Если вы используете самую последнюю версию VB, вы можете написать следующее; в противном случае вам не повезло:

Index = Me.lst_department.FindItem(0, True, Sub(e As ListBoxFindItemArgs) e.IsFound = Object.Equals(ListValue, e.ItemValue))

1 Кроме того, это не предикат. Предикат - это особый тип функции, имеющий сигнатуру Function(x As T) As Boolean для некоторого типа T.

...