在对象更改后更新列表中的对象
本文关键字:对象 列表 更新 | 更新日期: 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