2010-04-30 3 views

ответ

3

Если вы хотите, чтобы это сработало, вы можете использовать List<T> и имеете Customer implement IEquatable<Customer>. Простой пример:

using System; 
using System.Collections.Generic; 

class Customer : IEquatable<Customer> 
{ 
    public int i; 
    public string c1, c2; 
    public Customer(int i, string c1, string c2) 
    { 
     this.i = i; 
     this.c1 = c1; 
     this.c2 = c2; 
    } 

    bool System.IEquatable<Customer>.Equals(Customer o) 
    { 
     if(o == null) 
      return false; 
     return this.i == o.i && 
      this.c1 == o.c1 && 
      this.c2 == o.c2; 
    } 

    public override bool Equals(Object o) 
    { 
     return o != null && 
      this.GetType() == o.GetType() && 
      this.Equals((Customer) o); 
    } 

    public override int GetHashCode() 
    { 
     return i.GetHashCode()^
      c1.GetHashCode()^
      c2.GetHashCode(); 
    } 
} 
+0

Большое спасибо, Мэтью. Он отлично работает! – user302933

5

Вместо удаления экземпляра клиента вы только что добавили, вы пытаетесь удалить новый экземпляр клиента. Вам нужно будет получить ссылку на первый экземпляр клиента и удалить, что, например:

Customer customer = new Customer(99, "H", "P"); 
collCustList.Add(customer); 
collCustList.Remove(customer); 

или, более кратко, если вы знаете, вы удаляете самый последний клиент, вы можете сделать:

collCustList.Remove(collCustList.Last()); 

Если вы не имеете существующую ссылку на экземпляр клиента, который вы пытаетесь удалить, можно использовать запрос Linq, как так:

Customer customer = collCustList.Where(c => c.Number == 99 && c.Type == "H" /* etc */).FirstOrDefault(); 
if (customer != null) 
{ 
    collCustList.Remove(customer); 
} 

или даже просто использовать метод RemoveAll() :

collCustList.RemoveAll(c => c.Number == 99 && c.Type == "H" /* etc */); 
+0

Спасибо, Сэм. У меня возникли проблемы с созданием Customer customer = collCustList.Select (c => c.Number == 99 && c.Type == "H"/* и т. Д. * /). FirstOrDefault(); что мне не хватает? Спасибо – user302933

+0

Извините - я не знаю, каковы свойства вашего клиента на основе кода, поэтому я использовал примеры. Свойства 'c.xxx' должны быть заменены любыми именами свойств класса Customer. – Sam

+0

Спасибо, я заменил свойства. Ошибка построения Невозможно неявно преобразовать тип 'bool' в Customer – user302933

1
Customer c = new Customer(99, "H", "P"); 
List collCustList = new List(); collCustList.Add(c); 
collCustList.Remove(c); 

Это работает, потому что это удаление и тот же объект, который был добавлен. Ваш код пытается удалить другой новый объект, который не совпадает с объектом, который вы только что добавили (это другой объект).

+0

С: спасибо, к сожалению, не сразу после добавления. Я не могу держать клиента c. Извините, я не дал понять это в своем оригинальном посте – user302933

2

новый клиент() создаст новый экземпляр, который отличается от того, который вы добавляете в Список. Таким образом, List не сможет сопоставить объект для удаления.

Так используйте способ, предложенный Робертом, или вам нужно выполнить итерацию по списку для сопоставления данных (99, «H», «P»), а затем удалить с помощью ссылки соответствующего объекта объекта.

/сойка

1

Если и хотите RemoveAt

private void removeButton_Click(object sender, EventArgs e) 
     { 
     if (displayListBox.SelectedIndex != -1) 
      displayListBox.Items.RemoveAt(displayListBox.SelectedIndex); 
     } 
Смежные вопросы