我有两个Dictionary<string,int>  dic1和dic2我想要的就是判断dic2中的某个key在dic1中是否存在,如果有,就在dic2中删掉这个key所在的元素。本来我是傻乎乎的用foreach做的foreach(string x in dic2.Keys)
{
   if(dic1.ContainsKey(x)
       dic2.Remove(x);
}我晕死了。他们说foreach里面不能做移除,用for可以。
我该怎么办呢?Dictionary好像不能用下标访问啊,怎么用for去重呢?

解决方案 »

  1.   

    如果在用的是.net framework 3.5,可以把dict2的keys转成list再做循环,dict2.Keys.ToList()不然的话,你可以创建一个list,记录要删除的元素,最后删除。
      

  2.   

       IList<string> _List = new List<string>();
                foreach (string x in dic2.Keys)
                {
                    if (dic1.ContainsKey(x)) _List.Add(x);            }            for (int i = 0; i != _List.Count; i++)
                {
                    dic2.Remove(_List[i].ToString());
                }这样不行?
      

  3.   

    如果用Linq做的话,似乎更简单            var query = from d2 in dict2
                            where !dict1.ContainsKey(d2.Key)
                            select d2;返回的query就是过滤后的Dictionary了。我只是简单的试了下,不知道会不会有其他问题
      

  4.   

      foreach(string x in dict1.Keys)
             {
              if(dic2.ContainsKey(x))
               dic2.Remove(x);
             } 这样似呼是一样的啊,只要dict2不在foreach 中
      

  5.   

    foreach可以做移除哦 对你这个例子来说的话
      

  6.   

    foreach(string x in dic1.Keys)
    {
       if(dic2.ContainsKey(x)
           dic2.Remove(x);
    }这样应该可以!