2011-02-06 10 views
12

Jak mogę zmienić pozycję na liście w poniższym kodzie:Edycja pozycję na liście <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

że nie próbował niczego? –

+0

jeśli jest OK! zamień na linq –

+23

** Powinieneś nazwać swoje pola tekstowe **. – SLaks

Odpowiedz

31

Po dodaniu elementu do listy, można zastąpić go przez pisanie

list[someIndex] = new MyClass(); 

można zmodyfikować istniejącą pozycję na liście pisząc

list[someIndex].SomeProperty = someValue; 

EDIT: Można napisać

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

thanx. W jaki sposób jest ten kod dla BindingList ? –

+0

Ponieważ działa metoda FindLastIndex! –

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

Nie trzeba używać LINQ od List<T> zapewnia sposoby, aby to zrobić:

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

thanx. W jaki sposób jest ten kod dla BindingList ? –

+0

Ponieważ działa metoda FindLastIndex! –

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

Z:

  • IdItem jest id elementu, który chcesz do modyfikacji

  • FieldToModify to pole pozycji, którą chcesz zaktualizować.

  • NewValueForTheField jest dokładnie tym, nowa wartość.

(To działa dla mnie idealny, testowane i wdrażane)

+0

To powinna być akceptowana odpowiedź. – Stuart

Powiązane problemy