una objetos net lista dinamicos buscar vb.net generics

vb.net - objetos - Buscar objeto en la lista genérica



list where vb net (4)

En general, necesitas usar predicados:

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)

O con métodos en línea:

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

¿Es posible buscar un objeto por una de sus propiedades en una lista genérica?

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

Luego cargando y buscando

Dim list as new list(Of Customer) list.Add(New Customer(1,"A") list.Add(New Customer(2,"B")

¿Cómo puedo devolver el objeto del cliente con id = 1? ¿Tiene esto que ver con el "Predicado" en Genéricos?

Nota: estoy haciendo esto en VB.NET.


Sí, esto tiene todo que ver con los predicados :)

Desea el método Find (Of T) . Necesita pasar un predicado (que es un tipo de delegado en este caso). Cómo construyes ese delegado depende de qué versión de VB estés usando. Si está utilizando VB9, podría usar una expresión lambda. (Si está utilizando VB9, es posible que desee utilizar LINQ en lugar de Buscar (De T), en primer lugar, tenga en cuenta). La forma de expresión lambda sería algo así como:

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

No estoy seguro si VB8 admite métodos anónimos de la misma manera que C # 2. Si necesita llamar a esto desde VB8, veré qué puedo hacer. (Soy más una persona C # realmente :)



También podría sobrecargar el método equals y luego hacer un contenedor. Me gusta esto

Dim list as new list(Of Customer) list.Add(New Customer(1,"A") list.Add(New Customer(2,"B") list.contains(new customer(1,"A"))

el método igual entonces se vería así

public overrides function Equals(Obj as object) as Boolean return Me.Id.Equals(ctype(Obj,Customer).Id end Function

No probado, pero debe ser lo suficientemente cerca.