
Por si no lo sabes, te comento que el método «Find» también hace
internamente una especie de «For Each» para encontrar el elemento
especificado; una vez que lo encuentra, abandono el bucle «For Each» para
devolver el objeto encontrado. Por tanto, creo que da igual que utilices el
método «Find» o un bucle «For Each».
Pero centrándonos en el asunto de tu mensaje, para que puedas utilizar el
método «Find» de un objeto «List Of (T)», deberás implementar una función
que tenga la misma firma del delegado «Predicate(Of T)», el cual se
encuentra declarado de la siguiente manera:
Public Delegate Function Predicate(Of T)(ByVal obj As T) As Boolean
Siendo así, bien podrías construir en el código cliente la siguiente
función:
Private Function BuscarPersona(ByVal persona As CPersona) As Boolean
If persona._nombre.ToLower = _nombre.ToLower Then
Return True
Else
Return False
End If
End Function
Pero para que el ejemplo funcione, tienes que declarar a nivel del
formulario un campo que contenga el nombre de la persona que se desea buscar
dentro de la colección:
Private _nombre As String
Como podrás observar, la función sólo se limita a buscar dentro de la
colección el nombre especificado en el campo «_nombre». Para ello
ejecutaríamos lo siguiente:
' Declaramos la correspondiente variable List (Of T)
'
Dim l As New List(Of CPersona)
' Añadimos unos cuantos elementos a la colección
'
With l
.Add(New CPersona("José,", "123456789"))
.Add(New CPersona("Roberto", "58974789"))
.Add(New CPersona("Rosario", "14589"))
.Add(New CPersona("Fernando", "56699885"))
.Add(New CPersona("Luis", "112523365"))
End With
' Creamos un objeto Predicate que apuntará a la función BuscarPersona
' Aquí está la cuestión de todo el tema.
'
Dim match As New Predicate(Of CPersona)(AddressOf BuscarPersona)
' Indicamos el nombre que deseamos buscar
'
_nombre = "RoBeRtO"
' Efectuamos la búsqueda
'
Dim p As CPersona = l.Find(match)
' Comprobamos el resultado
'
If p IsNot Nothing Then
MessageBox.Show("Encontrado: " & p._telefono)
Else
MessageBox.Show("Elemento no encontrado")
End If
Como bien podrás entender, se trata de un simple ejemplo que demuestra cómo
utilizar el método «Find» del objeto «List (Of T)»; de tí depende el
modificarlo para que se adapte a tus necesidades.
Pero vuelvo a insistir en lo dicho al principio; que para hacer lo mismo,
también puedes utilizar un bucle «For Each», porque el propio método «Find»
se encarga de recorrer todos los elementos de la colección hasta encontrar
el primero que cumpla con la condición especificada, que será el objeto que
devolverá la función, en el ejemplo, cualquier objeto CPersona cuyo nombre
sea «Roberto».
--
Enrique Martínez
[MS MVP - VB]
Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.