是否可以通过通用列表中的某个属性搜索对象?
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
Run Code Online (Sandbox Code Playgroud)
然后加载和搜索
Dim list as new list(Of Customer)
list.Add(New Customer(1,"A")
list.Add(New Customer(2,"B")
Run Code Online (Sandbox Code Playgroud)
如何返回id = 1的客户对象?这与泛型中的"谓词"有关吗?
注意:我在VB.NET中这样做.
Jon*_*eet 22
是的,这与谓词有关:)
你想要Find(Of T)方法.您需要传入一个谓词(在这种情况下是一种委托).如何构造该委托取决于您使用的VB版本.如果您使用的是VB9,则可以使用lambda表达式.(如果你正在使用VB9,你可能首先想要使用LINQ而不是Find(Of T),请注意.)lambda表达式形式如下:
list.Find(function(c) c.ID = 1)
Run Code Online (Sandbox Code Playgroud)
我不确定VB8是否支持匿名方法,就像C#2一样.如果你需要从VB8调用它,我会看到我能想到的.(我真的更像是一个C#人:)
通常,您需要使用谓词:
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)
Run Code Online (Sandbox Code Playgroud)
或者使用内联方法:
Dim customerWithID1 As Customer = list.Find(Function(p) p.ID = 1)
Run Code Online (Sandbox Code Playgroud)