2012-03-20 114 views
2

執行此操作的正確方法是什麼? for循環,而不是Foreach和對迭代變量的修改

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

一個'for'循環。 'foreach'的設計使你無法修改狀態變量。 – GGulati 2012-03-20 02:25:50

回答

6

使用:

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

我想你」重新創建一個新的對象列表,即:

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

然後要麼newList更換ObjectList或只返回它無論你做什麼

+2

忘記這個艾哈邁德的答案是更好的 – 2012-03-20 02:27:23