2008-11-28 6 views
8

내가 현재 존재하는 방법은 물건의 조건을 찾고으로이 분명 실패사용 List.Exists와 술어 제대로

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 

의 라인을 따라 뭔가를 구현하려합니다 모든

.

누구든지이 술어를 완전히 설명하고 내가 여기서 뭘하려고하는지 어떻게 달성 할 수 있습니까?

나는 그러나 이것이 idenitcal 항목을 검색하지 않습니다

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

를 사용하려고하고 사용하는 메소드는 목록

감사

답변

20

List(Of T).Contains에 중복 들어갑니다. 말하듯이 존재하는 술어가 있습니다. 물론, 예상대로 작동하도록 설정하려면 Equals() 메서드와 GetHashCode() 메서드를 재정의해야합니다.

List(Of T).Exists은 T 유형의 항목을 전달할 때 부울 값을 반환하는 함수가 필요합니다. 여기에서 T는 유형이 Stuff입니다. 따라서 다음과 같은 메소드를 작성할 수 있습니다.

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

등등을 작성할 수 있습니다.

+1

+1 멋지게 설명했습니다. –