Как найти индекс объекта в списке объектов?VB.Net - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю метод 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 голосов
/ 10 февраля 2019

Как именно вы ожидаете, что метод FindIndex узнает, что делать с тем String, который вы передаете?Похоже, вы предполагаете, что он будет знать, что он представляет имя и что ему нужно сопоставить элемент по свойству Name, но как вы думаете, как он это сделает?Как вы думаете, почему он будет соответствовать Name, а не Address?

Как говорится в сообщении об ошибке, вам нужно предоставить Predicate, который является делегатом, который принимает объект типа Tи возвращает Boolean.В вашем случае T - это TPerson, а Boolean необходимо указать, соответствует ли findname его свойству Name.Самый простой способ сделать это с помощью лямбда-выражения:

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

Вы можете сделать это с именованным методом и делегатом, если хотите, но это будет более затянуто, и это будет означать получениеfindname значение в некотором запутанном виде.Если вы прочитаете документацию по методу FindIndex (что вы должны были сделать перед публикацией здесь), вы можете найти пример такого рода вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...