2015-12-21 4 views
4

То, что я хотел бы получить, заключается в следующем: каждый раз, когда я добавляю student, он должен проверить ListBox, если внутри есть дубликат. Если это так, то он должен показать MessageBox и не допустить добавления элемента к ListBox.Проверить наличие дубликатов в ListBox

Это мой код на данный момент:

private void buttonAdd_Click(object sender, EventArgs e) 
{ 
     Student student = GetStudent(); 
     Repository.AddStudent(student); 
     if (listBoxStudents.Items.Contains(student)) 
     { 
      MessageBox.Show("This student already exists!"); 
     } 
     else 
     { 
      listBoxStudents.Items.Add(student); 
      ClearandFocus(); 
     } 
} 

Интересно, почему мой код не работает правильно, вход поступает из нескольких TextBoxes в форме, которая добавляется к List<Students> и ListBox.

+1

Подсказка: какой тип метод 'Contains()' принимает в качестве аргумента? –

+0

У вас есть идентификатор, который вы можете использовать? –

+1

'listBoxStudents.Items.Select (s => s.StudentId) .Contains (student)' –

ответ

4

Это, вероятно, происходит потому, что вы неправильно переопределили метод Equals в своем классе Student. Когда вы не переопределяете Equals на основе данных класса, запускается метод Equals по умолчанию из класса object и просто сравнивает ссылки на объекты. Таким образом, вы сравниваете два идентичных, но разных объекта, что приводит к значению false от object.Equals, что приводит к тому, что метод Contains возвращает false.

+0

Спасибо, заработайте Equals, и это сработало! – Vexena

+1

Полезно знать. Чтобы быть хорошим гражданином .NET, убедитесь, что вы также переопределяете «Student.GetHashCode» (который вы должны делать всякий раз, когда вы переопределяете «Equals»). – adv12

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