当前位置:  开发笔记 > 编程语言 > 正文

在通用列表中搜索对象

如何解决《在通用列表中搜索对象》经验,为你挑选了2个好方法。

是否可以通过通用列表中的某个属性搜索对象?

Public Class Customer

    Private _id As Integer

    Private _name As String

    Public Property ID() As Integer
        Get
            Return _id
        End Get
        Set
            _id = value
        End Set
    End Property

    Public Property Name() As String
        Get
            Return _name
        End Get
        Set
            _name = value
        End Set
    End Property

    Public Sub New(id As Integer, name As String)
        _id = id
        _name = name
    End Sub

End Class

然后加载和搜索

Dim list as new list(Of Customer)

list.Add(New Customer(1,"A")

list.Add(New Customer(2,"B")

如何返回id = 1的客户对象?这与泛型中的"谓词"有关吗?

注意:我在VB.NET中这样做.



1> Jon Skeet..:

是的,这与谓词有关:)

你想要Find(Of T)方法.您需要传入一个谓词(在这种情况下是一种委托).如何构造该委托取决于您使用的VB版本.如果您使用的是VB9,则可以使用lambda表达式.(如果你正在使用VB9,你可能首先想要使用LINQ而不是Find(Of T),请注意.)lambda表达式形式如下:

list.Find(function(c) c.ID = 1)

我不确定VB8是否支持匿名方法,就像C#2一样.如果你需要从VB8调用它,我会看到我能想到的.(我真的更像是一个C#人:)



2> Ozgur Ozcita..:

通常,您需要使用谓词:

list.Add(New Customer(1, "A"))
list.Add(New Customer(2, "B"))

Private Function HasID1(ByVal c As Customer) As Boolean
    Return (c.ID = 1)
End Function

Dim customerWithID1 As Customer = list.Find(AddressOf HasID1)

或者使用内联方法:

Dim customerWithID1 As Customer = list.Find(Function(p) p.ID = 1)

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有