Список VB.Net. Найти. Передача оценивает предикату

Наличие небольшого количества проблемы с помощью Списка. Найдите с пользовательским предикатом

у меня есть функция, которая делает это

private function test ()
    Dim test As Integer = keys.Find(AddressOf FindByOldKeyAndName).NewKey

вот функция для предиката

Private Shared Function FindByOldKeyAndName(ByVal k As KeyObj) As Boolean
        If k.OldKey = currentKey.OldKey And k.KeyName = currentKey.KeyName Then
            Return True
        Else
            Return False
        End If


    End Function

путем выполнения его этот путь означает, что у меня должен быть общий объект "currentKey" в классе, и я знаю, что должен быть способ передать в значениях, которыми я интересуюсь CurrentKey (а именно, keyname, и oldkey)

идеально я хотел бы назвать его чем-то как keys.Find(AddressOf FindByOldKeyAndName(Name,OldVal))

однако, когда я делаю это, я получаю ошибки компилятора.

Как я называю этот метод и передаю в значениях?

10
задан Beta033 16 April 2010 в 20:04
поделиться

2 ответа

Вы можете легко решить эту проблему с помощью лямбда-выражения, доступного в VS2008 и выше. Глупый пример:

Sub Main()
    Dim lst As New List(Of Integer)
    lst.Add(1)
    lst.Add(2)
    Dim toFind = 2
    Dim found = lst.Find(Function(value As Integer) value = toFind)
    Console.WriteLine(found)
    Console.ReadLine()
End Sub

Для более ранних версий вам нужно сделать "currentKey" частным полем вашего класса. Посмотрите мой код в этой ветке , чтобы найти более чистое решение.

25
ответ дан 3 December 2019 в 14:52
поделиться

Мне не нужно было пробовать это в новых версиях VB.Net, которые могли бы иметь более приятный способ, но в старых версиях единственный известный мне способ - иметь общего члена в вашем классе для установки с значение до звонка.
В сети есть различные примеры людей, создающих небольшие служебные классы, чтобы обернуть это и сделать его немного лучше.

2
ответ дан 3 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: