Редактирование элемента в списке <T> - PullRequest
18 голосов
/ 06 февраля 2011

Как мне отредактировать элемент в списке в коде ниже:

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(...));

Ответы [ 5 ]

42 голосов
/ 06 февраля 2011

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

list[someIndex] = new MyClass();

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

list[someIndex].SomeProperty = someValue;

РЕДАКТИРОВАТЬ : Вы можете написать

var index = list.FindIndex(c => c.Number == someTextBox.Text);
list[index] = new SomeClass(...);
14 голосов
/ 06 февраля 2011

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

int index = lst.FindLastIndex(c => c.Number == textBox6.Text);
if(index != -1)
{
    lst[index] = new Class1() { ... };
}
7 голосов
/ 21 мая 2014
public changeAttr(int id)
{
    list.Find(p => p.IdItem == id).FieldToModify = newValueForTheFIeld;
}

С:

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

  • FieldToModify - поле элементачто вы хотите обновить.

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

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

4 голосов
/ 21 марта 2018
  1. Вы можете использовать метод FindIndex (), чтобы найти индекс элемента.
  2. Создать новый элемент списка.
  3. Заменить проиндексированный элемент новым элементом.

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

int index = list.FindIndex(item => item.Number == textBox6.Text);

Class1 newItem = new Class1();
newItem.Prob1 = "SomeValue";

list[index] = newItem;
3 голосов
/ 06 февраля 2011
class1 item = lst[index];
item.foo = bar;
...