.net 根据对象的一个属性在列表中查找对象的索引

.net 根据对象的一个属性在列表中查找对象的索引,.net,vb.net,list,indexing,find,.net,Vb.net,List,Indexing,Find,我现在拥有的是一个具有一组属性的对象列表。例如: Dim children As List(Of Child) = New List(Of Child) Dim child As Child = New Child child.FaveColor = "Blue" child.Pet = "Dog" child.SchoolID = "01893A" children.Add(child) 稍后,我希望能够根据这个孩子的唯一学校ID号搜索我的

我现在拥有的是一个具有一组属性的对象列表。例如:

    Dim children As List(Of Child) = New List(Of Child)
    Dim child As Child = New Child

    child.FaveColor = "Blue"
    child.Pet = "Dog"
    child.SchoolID = "01893A"

    children.Add(child)

稍后,我希望能够根据这个孩子的唯一学校ID号搜索我的列表中所述对象的索引。我正在查看
FindIndex
IndexOf
,但是我所查看的所有示例都涉及根据对象的值而不是其属性来搜索列表。感觉它应该很简单,但我在这方面遇到了不少麻烦,所以如果有任何帮助,我们将不胜感激。

FindIndex
正是您想要的。您提供了一个
谓词(Of T)
委托给该谓词,以便可以使用您喜欢的任何条件,例如

Dim dogOwnerIndex = children.FindIndex(Function(child) child.Pet = "Dog")
如果不理解lambda表达式,可以使用命名方法:

Private Function ChildIsDogOwner(child As Child) As Boolean
    Return child.Pet = "Dog"
End Function
并为其创建一个委托:

Dim dogOwnerIndex = children.FindIndex(AddressOf ChildIsDogOwner)
谓词(T的)
只是一个方法的委托,该方法接受一个
T
实例(
T
列表的
相同,因此在您的例子中
子类
)并返回一个
布尔值
FindIndex
基本上循环遍历
列表中的项目
,并将每个项目传递给指定的方法,并返回该方法返回的第一个项目的索引
True

就像我说的,你可以在谓词中使用任何你喜欢的条件,例如

Dim blueLovingDogOwnerIndex = children.FindIndex(Function(child) child.Pet = "Dog" AndAlso
                                                                 child.FaveColor = "Blue")
请注意,如果您正在进行特别搜索,即仅使用这些条件一次,那么我建议使用lambda。如果你打算在多个地方进行相同的搜索,我建议只编写一次该方法,并在多个地方使用它。当然,你也可以写一次lambda,例如

Private childIsDogOwner As Predicate(Of Child) = Function(child) child.Pet = "Dog"
然后使用
childIsDogOwner
您需要适当代表的任何地方:

Dim dogOwnerIndex = children.FindIndex(childIsDogOwner)

@朋友,你一定错过了该方法中的
Return
关键字,该关键字肯定一直存在,并且在我阅读你的评论后没有添加我责怪Visual Basic的
=
:PThanks,这正是我想要的。我有点半途而废了,因为我想用一个lambda表达式,但在如何“表达”这个问题上遇到了难题,因为我以前没有太多使用过它们。
感觉应该很简单,但我遇到了不少麻烦
,您当前的代码在哪里?请更新您尝试过的问题。。。