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

时间:2012-01-07 16:33:57

标签: c#

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

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

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

我需要改变什么?

感谢。

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

你不能这样做。 C#不允许修改foreach的迭代变量。您最好的选择是保存辅助列表并将修改后的值放在那里,然后替换初始列表。或者,如果您的数据结构允许直接建立索引,则可以将foreach替换为for,然后您就可以直接分配对象。

答案 2 :(得分:0)

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

如果你回来是一个全新的对象,那就去做Anthony Pegram的建议吧。

答案 3 :(得分:0)

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

我是用java思考写的,如果有些更改需要让它在C#上工作,那就是我的客人

答案 4 :(得分:0)

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

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

至于原因,这个问题解释了它: Why is the iteration variable readonly

希望这会有所帮助 ÿ