我创建这在对象的列表中搜索特定的名字,并与若发现此名称的对象列表返回指数的方法是FindPerson,否则返回-1。
Public Class TPerson
Private Name As String
Private Address As String
Private Age As Integer
Public Sub New()
Name = "x"
Address = "x"
Age = 0
End Sub
……
End Class
Public Class TGroup
Private Group As List(Of TPerson)
Private GroupSize As Integer
Public Sub New(size As Integer)
GroupSize = size
Group = New List(Of TPerson)
End Sub
Public Sub FindPerson(findname As String)
Dim index As Integer
index = Group.FindIndex(findname) 'error
End Sub
End Class
输出应该在列表中的索引,但是当我运行程序出现错误:类型的BC30311价值“字符串”不能转换为“上游(中TPerson)”
我不太知道如何解决这个问题的任何帮助将不胜感激
究竟你怎么能指望的FindIndex
方法知道如何处理要传递在String
呢?你似乎认为它会知道它代表的名称和它需要匹配Name
性质的项目,但你是怎么想它会做到这一点?为什么你认为它会匹配Name
而非Address
?
由于错误消息说,您需要提供Predicate
这是一个委托,它需要一个类型T
的对象,并返回一个Boolean
。在你的情况,T
是TPerson
和Boolean
需要指出findname
其是否Name
属性相匹配。要做到这一点,最简单的方法是使用Lambda表达式:
Dim index = Group.FindIndex(Function(person) person.Name = findname)
你可以用命名的方法和一个委托做,如果你想要,但它会比较啰嗦,它意味着在一些令人费解的手段获取findname
值。如果你读了FindIndex
方法(你应该在这里发帖前已经做)的文档,你可以找到那种事的例子。