Foreach和修改迭代变量

时间:2012-03-20 02:21:18

标签: c#

这样做的正确方法是什么?

  foreach(Object obj in ObjectList<Object>)
   {
      Object changedObject= GetInfo(obj);
      obj=changedObject; //no good
      obj.prop1 = changedObject.prop1; //ok?
      obj.prop2 = changedObject.prop2; //ok?
      better way?
    }

2 个答案:

答案 0 :(得分:6)

改为使用for循环:

for (int i = 0; i < list.Count; i++)
{
    Object changedObject = GetInfo(list[i]);
    list[i] = changedObject;
}

您还可以使用LINQ,如果您需要列表而不是.ToList(),则附加IEnumerable<T>

var query = result.Select(o => GetInfo(o));

答案 1 :(得分:1)

我认为你最好创建一个新的对象列表,即:

var newList = new List<Object>();
foreach(Object obj in ObjectList<Object>)
{
   newList.Add(GetInfo(obj));
}

然后将ObjectList替换为newList,或者只是从正在进行的任何操作中返回