2012-01-27 2 views
0

Это моя проблема. Если я пишу это -Непрерывный предикат делегата VB.NET

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 
+0

Какой тип lst_департамента? И что * точно * происходит? («не работает» не говорит нам много). –

+0

@JonSkeet lst_department - это тип 'DevExpress.XtraEditors.CheckedListBoxControl'. То, что я пытаюсь достичь, упоминается в этом вопросе, который я задал - [Получить индекс элемента из базы данных DevExpress CheckedListBoxControl] (http://stackoverflow.com/questions/9003193/get-item-index-from-databound-devexpress- checkedlistboxcontrol). –

+1

Было бы полезно предоставить оба этих бита информации - а также подпись «FindItem» - в исходном вопросе. Прочитайте http://tinyurl.com/so-hints для предложений по следующему вопросу. –

ответ

4

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

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

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

+0

Если я пишу 'Sub', тогда компилятор генерирует ошибку -' Expression expected.' Есть ли другой способ? –

+0

@Sohan Очевидно, у вас нет последней версии VB (VB10). Нет, нет другого пути, поскольку эта функция раньше не существовала. –

+0

Спасибо за информацию. Ценить это. –