List.Foreach可以增刪集合項,而foreach不行。
public static void Main() { List<T_Info_PriorApplys> list = new List<T_Info_PriorApplys>(); list.Add(new T_Info_PriorApplys() { }); list.Add(new T_Info_PriorApplys() { }); list.ForEach(item => item.ApplyNo = "testNo" + list.IndexOf(item)); list.ForEach(p => { if (p.ApplyNo == "testNo0") { list.Remove(p); list.Insert(0, new T_Info_PriorApplys { ApplyNo = "NewNo0-1" }); list.Add(new T_Info_PriorApplys { ApplyNo = "NewNo0-2" }); } }); list.ForEach(item => Console.WriteLine(item.ApplyNo)); Console.Read(); } /* 運行結果: NewNo0-1 testNo1 NewNo0-2 */
需說明的是,使用Foreach時,當集合的元素增加后,由於索引器是從0開始的,新的元素如果在當前索引的后面,則也會參與遍歷,如果在當前索引前,則當前元素會再次參與遍歷。 所以, 如果在改變元素個數時沒有條件, 會導致死循環。代碼見下方:
list.ForEach(p => { list.Remove(p); list.Insert(0, new T_Info_PriorApplys { ApplyNo = "NewNo0-1" }); list.Add(new T_Info_PriorApplys { ApplyNo = "NewNo0-2" }); });
用 foreach實現上面的邏輯時, 當新增完元素之后,下一次迭代時,會報異常 System.InvalidOperationException:集合已修改;可能無法執行枚舉操作。