2008-11-28 15 views
8

Şu anda Var olma yöntemi Stuff bir yüklemi arıyor gibi bu besbelli başarısızkullanma List.Exists ve Predicates doğru

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 

çizgisinde bir şey uygulamak çalışıyorum tamamı

.

Herhangi biri, yüklemeyi tam olarak açıklayabilir ve burada yapmaya çalıştığım şeyi nasıl başarabilirim.

Ancak bu idenitcal girişi algılamaz

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

kullanmaya çalıştık ve kullanmakta gereken yöntemdir listede

Teşekkür

cevap

20

List(Of T).Contains içine yinelenen girer. Var, dediğiniz gibi, bir yüklem bekler. Elbette, .Contains beklendiği gibi çalışmak için, Equals() yönteminin yanı sıra GetHashCode()'u geçersiz kılmanız gerekir.

List(Of T).Exists, T türünde bir öğeyi geçtiğinde bir Boole değeri döndürecek bir işlev bekler; burada, sizin durumunuzda, T türünde. Bu nedenle, aşağıdaki gibi görünen bir yöntem yazabilirsiniz:

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

vb.

+1

+ 1 Güzelce açıklanmıştır. –

İlgili konular