web-dev-qa-db-ja.com

リスト内のアイテムを編集する<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(...));
19
mah_85

リストにアイテムを追加した後、次のように記述して置き換えることができます

list[someIndex] = new MyClass();

リスト内の既存のアイテムを変更するには、次のように記述します。

list[someIndex].SomeProperty = someValue;

[〜#〜] edit [〜#〜]:書くことができます

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

List<T>がこれを行うメソッドを提供するため、linqを使用する必要はありません。

int index = lst.FindLastIndex(c => c.Number == textBox6.Text);
if(index != -1)
{
    lst[index] = new Class1() { ... };
}
14
Lee
public changeAttr(int id)
{
    list.Find(p => p.IdItem == id).FieldToModify = newValueForTheFIeld;
}

と:

  • IdItemは、変更する要素のIDです

  • FieldToModifyは、更新するアイテムのフィールドです。

  • NewValueForTheFieldはまさに新しい値です。

(それは私にとって完璧に機能し、テストされ実装されています)

7
user3570113
  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;
4
Marcus
class1 item = lst[index];
item.foo = bar;
3
Itay Karo