在对象更改后更新列表中的对象

本文关键字:对象 列表 更新 | 更新日期: 2023-09-27 18:19:46

我有一个对象列表,我在列表上做foreach,我将每个对象发送到一个方法,该方法修改对象并返回它;像这样:

foreach (MyObjectModel o in TheMasterObject.ListOfMyObjectModel)
{
  o = MyMethod(o);
}

这行不通。我想做的是用MyMethod返回的修改版本替换我正在迭代的对象。

我需要更改什么?

谢谢。

在对象更改后更新列表中的对象

不能重新分配给循环变量,重新分配变量无论如何都不会影响列表中的对象。如果需要重写列表中的对象,请使用for循环。

for (int index = 0; index < list.Count; index++)
{
     var obj = list[index];
     list[index] = MyMethod(obj);
}

你不能这样做。C#不允许修改foreach的迭代变量。最好的选择是保留一个次要列表,将修改后的值放在其中,然后替换初始列表。或者,如果数据结构允许直接索引,则可以将foreach替换为for,然后可以直接分配对象。

如果MyObjectModel是一个类(而不是结构),则不需要重新分配它。类是引用类型,这意味着您的方法将获得指向集合中对象的指针。您在方法中所做的任何修改都将在列表中的实际对象上完成。你不需要更换它。

如果你要返回的是一个全新的物体,那么按照安东尼·佩格拉姆的建议去做。

for (int i =0; i < TheMasterObject.ListOfMyObjectModel.size(); ++i) {
    TheMasterObject.ListOfMyObjectModel.set(i, MyMethod(TheMasterObject.ListOfMyObjectModel.get(i)));
}

我写这篇文章是用java的思想,如果需要一些更改让它在C#上工作,请成为我的客户

使用for循环而不是迭代器。

for (int i = 0; i < objectModels.Count; i++) {
  objectModels[i] = MyMethod(objectModels[i]);
}

至于原因,这个问题解释了它:为什么迭代变量是只读

希望这能有所帮助Y