如何在对象列表中找到对象的索引? VB.Net

时间:2019-02-09 23:44:28

标签: vb.net oop

我正在创建一个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类型'String'的值不能转换为'Predicate(Of TPerson)'

我不太确定如何解决此问题,将不胜感激

1 个答案:

答案 0 :(得分:0)

您如何期望FindIndex方法知道如何处理传入的String?您似乎假设它会知道它代表一个名称,并且需要通过Name属性来匹配某个项目,但是您认为它将如何做到这一点?您为什么认为它会在Name而不是Address上匹配?

如错误消息所述,您需要提供一个Predicate,它是一个委托,它接受类型为T的对象并返回一个Boolean。在您的情况下,TTPersonBoolean需要指出findname是否与其Name属性相匹配。最简单的方法是使用Lambda表达式:

Dim index = Group.FindIndex(Function(person) person.Name = findname)

如果愿意的话,可以使用命名方法和委托来完成,但这会花费很多时间,这意味着以某种复杂的方式获取findname值。如果您阅读了FindIndex方法的文档(应该在此处发布之前完成),您可以找到此类示例。