Наличие небольшого количества проблемы с помощью Списка. Найдите с пользовательским предикатом
у меня есть функция, которая делает это
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))
однако, когда я делаю это, я получаю ошибки компилятора.
Как я называю этот метод и передаю в значениях?
Вы можете легко решить эту проблему с помощью лямбда-выражения, доступного в 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" частным полем вашего класса. Посмотрите мой код в этой ветке , чтобы найти более чистое решение.
Мне не нужно было пробовать это в новых версиях VB.Net, которые могли бы иметь более приятный способ, но в старых версиях единственный известный мне способ - иметь общего члена в вашем классе для установки с значение до звонка.
В сети есть различные примеры людей, создающих небольшие служебные классы, чтобы обернуть это и сделать его немного лучше.