2015-12-21 72 views
4

我想實現的是如下:每當我添加一個student它應該檢查ListBox如果裏面有重複項。如果是這種情況,它應該顯示一個MessageBox,並防止將項目添加到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

你有沒有可以使用的ID? –

+1

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

回答

4

這可能是因爲您沒有正確覆蓋Student類中的Equals方法。如果不根據類別數據覆蓋Equals,則將運行object類中的默認Equals方法,該方法僅比較對象引用。因此,您正在比較兩個相同但不同的對象,結果爲object.Equals的值爲false,這會導致Contains方法返回false

+0

謝謝,覆蓋Equals並且它工作正常! – Vexena

+1

很高興知道。要成爲一名優秀的.NET公民,請確保您也覆蓋'Student.GetHashCode'(當您重寫'Equals'時,您應該這樣做)。 – adv12