2008-11-28 2 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 

Это терпит неудачу, очевидно, как метод Exist ищет предикат вещества.

Может ли кто-либо полностью объяснить предикат и как я могу достичь того, что я пытаюсь сделать здесь.

Я пытался использовать

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

однако это не обнаруживает idenitcal запись и входит дубликат в список

Спасибо

ответ

20

List(Of T).Contains является метод, который вы должны использовать. Существует, как вы говорите, ожидает предикат. Конечно, для. Чтобы работать как ожидалось, вам необходимо переопределить метод Equals(), а также GetHashCode().

ожидает функцию, которая возвращает логическое значение при передаче элемента типа T, где T в вашем случае имеет тип Stuff. Итак, вы можете написать метод, который выглядит так:

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

и так далее.

+1

+ 1 Красиво объяснено. –

Смежные вопросы