2008-11-28 14 views
8

TodoUso List.Exists y predicados correctamente

Actualmente estoy tratando de poner en práctica algo en la línea de

dim l_stuff as List(of Stuff) 

dim m_stuff as new Stuff 

m_stuff.property1 = 1 
m_stuff.property2 = "This" 

if not l_stuff.exists(m_stuff) then 
    l_stuff.add(m_stuff) 
end if 

esto falla, evidentemente, como el método de existir es buscando un predicado de la materia.

¿Alguien puede explicar completamente el predicado y cómo puedo lograr lo que estoy tratando de hacer aquí?

He intentado utilizar

if not l_stuff.contains(m_stuff) then 
    l_stuff.add(m_stuff) 
end if 

sin embargo, esto no detecta la entrada idenitcal y entra en un duplicado en la lista

Gracias

Respuesta

20

List(Of T).Contains es el método que se debe utilizar. Existe, como dices, espera un predicado. Por supuesto, para. Contiene que funcione como se esperaba, debe anular el método Equals(), así como GetHashCode().

List(Of T).Exists espera una función que devolverá un valor booleano cuando pasa un elemento de tipo T, donde T, en su caso, es del tipo Material. Por lo tanto, podría escribir un método similar a:

If Not l_stuff.Exists(Function(x) x.property1 = m_stuff.property1 And _ 
x.property2 = m_stuff.property2) Then 

y así sucesivamente.

+1

+ 1 Bien explicado. –

Cuestiones relacionadas