原文出处:http://www.cnblogs.com/linn/archive/2012/05/22/2513053.html

foreach是取只读的,在取的时候数据队列不能变(包括修改,删除,添加等)。要避免这个问题,就应该使用for循环。

             IList<Person> iList = new List<Person>();

            iList.Add( new Person("david",13));
            iList.Add(new Person("bob", 11));
            iList.Add(new Person("justin",12));
 

// 用linq重新排序 

            var textList = (from c in iList
                orderby c.age
                    select c);

 

            int iPerson =0;
            foreach (Person p in textList)
            {
                // 这时候在immediate Window里面输入iList.RemoveAt(2),程序会抛出异常
                Console.WriteLine(p.name + ":" + p.age);
                iList[iPerson] = p; // 排序后修改原来的队列!!!
                iPerson++;
            }
            for (int ii = 0; ii < iList.Count; ii++)
            {
                // 这时候在immediate Window里面输入iList.RemoveAt(2),程序不会抛出异常
                Console.WriteLine(iList[ii].name);
            }


本文转载:CSDN博客