日期:2014-05-16  浏览次数:21119 次

foreach遍历的问题
如下面代码,我想要删除dict字典表里的某个数据,但是字典key不连续,所以用foreach遍历,我晓得foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。所以我定义了一个临时字典,将dict赋给这个临时字典,然后遍历这个临时字典,得到key后,从dict中删除掉。可是这样还是会报错:集合已修改;可能无法执行枚举操作。小弟有点糊涂了,我操作这个临时字典会对源字典产生影响吗?这个字典之间的拷贝是怎么一种机制?还有我应该如何解决这个问题,谢谢了。

  private void button2_Click(object sender, EventArgs e)
        {
            Dictionary<int, int> b = new Dictionary<int, int>();
            b = dict;//dict是我定义好的一个有数据的字典,但key不连续
            if (dict.Count != 0)
            {
                foreach (var a in b.Keys)
                {
                   //某种操作得到我想要删除的key

                    dict.Remove(a);
                }
            }
            MessageBox.Show("ok");
        }

------解决方案--------------------
Dictionary是一个引用类型,=赋值只是将首地址付给了b,所以循环删除的时候还是不行。

如果要删除,需要用b记录下需要删除的key,然后循环b,删除dict中的内容。
------解决方案--------------------
foreach (var a in b.Keys.Cast<int>().ToList())
------解决方案--------------------
引用:
Quote: 引用:

foreach (var a in b.Keys.Cast<int>().ToList())

看不太懂,求详解~



b.Keys.Cast<int>().ToList()
tolist()弄了一个拷贝