2011-02-06 1 views
12

Как изменить элемент в списке в коде ниже:Редактирование элемента в списке <T>

List<Class1> list = new List<Class1>(); 

int count = 0 , index = -1; 
foreach (Class1 s in list) 
{ 
    if (s.Number == textBox6.Text) 
     index = count; // I found a match and I want to edit the item at this index 
    count++; 
} 

list.RemoveAt(index); 
list.Insert(index, new Class1(...)); 
+0

вы ничего не пробовали? –

+0

если все в порядке! конвертируйте в linq –

+23

** Вы должны называть свои текстовые поля **. – SLaks

ответ

31

После добавления элемента в список, вы можете заменить его, написав

list[someIndex] = new MyClass(); 

Вы можете изменить существующий элемент в списке, написав

list[someIndex].SomeProperty = someValue; 

EDIT: Вы можете написать

var index = list.FindIndex(c => c.Number == someTextBox.Text); 
list[index] = new SomeClass(...); 
+0

thanx. Как этот код для BindingList ? –

+0

Потому что это метод FindLastIndex! –

1
class1 item = lst[index]; 
item.foo = bar; 
13

Вам не нужно использовать LINQ, поскольку List<T> предоставляет методы, чтобы сделать это:

int index = lst.FindLastIndex(c => c.Number == textBox6.Text); 
if(index != -1) 
{ 
    lst[index] = new Class1() { ... }; 
} 
+0

thanx. Как этот код для BindingList ? –

+0

Потому что это метод FindLastIndex! –

4
public changeAttr(int id) 
{ 
    list.Find(p => p.IdItem == id).FieldToModify = newValueForTheFIeld; 
} 

С:

  • IdItem - это идентификатор элемента, который вы хотите для изменения

  • FieldToModify - это поле того места, которое вы хотите обновить.

  • NewValueForTheField - это то, что новое значение.

(Он отлично работает для меня, испытаны и внедрены)

+0

Это должен быть принятый ответ. – Stuart