使用List.Find与自定义谓词有点麻烦
我有一个这样做的功能
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及以上版本的lambda表达式清理该问题.一个愚蠢的例子:
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”成为您类的私有字段.检查我的代码在this thread为一个更清洁的解决方案.