如何找到一个对象的对象列表索引? VB.Net

问题描述 投票:0回答:1

我创建这在对象的列表中搜索特定的名字,并与若发现此名称的对象列表返回指数的方法是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)”

我不太知道如何解决这个问题的任何帮助将不胜感激

vb.net oop
1个回答
0
投票

究竟你怎么能指望的FindIndex方法知道如何处理要传递在String呢?你似乎认为它会知道它代表的名称和它需要匹配Name性质的项目,但你是怎么想它会做到这一点?为什么你认为它会匹配Name而非Address

由于错误消息说,您需要提供Predicate这是一个委托,它需要一个类型T的对象,并返回一个Boolean。在你的情况,TTPersonBoolean需要指出findname其是否Name属性相匹配。要做到这一点,最简单的方法是使用Lambda表达式:

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

你可以用命名的方法和一个委托做,如果你想要,但它会比较啰嗦,它意味着在一些令人费解的手段获取findname值。如果你读了FindIndex方法(你应该在这里发帖前已经做)的文档,你可以找到那种事的例子。

© www.soinside.com 2019 - 2024. All rights reserved.