我现在遇到这样一个问题:
hashtable a =new hashtable();
hashtable b =new hashtable();
.
.
.
//经过这段,a已经存有了值
b=a;string s1 = "111";
string s2 = "222";if(b.ContainsKey(s1))
{
  b[s1] = "222";  //这样的赋值,hashtable a中的也会被改变吧?因为指针的缘故。
}如果把b=a,改成b=a.clone(),这样就要新开一片内存,由于a,b中相同的值是大多数,程序中就会开出大片内存保存重复内容,我觉得不值得。如果写成:
hashtable a =new hashtable();
hashtable b =new hashtable();
.
.  //给a赋值
.
string s1 = "111";
string s2 = "222";
.
.  //给b赋值
.
//经过这段,a,b都已经存有了值下面用循环将a中有的,b中没有值添加到b中,这要用循环foreach(DictionaryEntry de in a)
{
  if (!b.ContainsKey(de.Key))
  {
    b.Add(de.Key,de.Value);
  }
}用循环的话,耗时太多所以我想寻找一种,先把a赋给b,然后能够单独给b[key]赋值的方法。

解决方案 »

  1.   


    Hashtable b =new Hashtable( a );    //<----use Hashtable( IDictionary ) constructor to copy
      

  2.   

    你知道是指针还这么玩...
    你的第一种是把a给变了.就用b=a.clone(),不新开还能咋样,一个变另一个不变本来就是两个不同的变量
    你的第二种还不是两个块内存,又多了个循环..
      

  3.   

    2楼的有道理
    应该是Hashtable b =new Hashtable( a );
      

  4.   

    如果a和b要存储相同的数据
    那就用Hashtable b =new Hashtable( a )
    如果a和b存储的不是相同的数据,而只有一部分相同
    你可以先将相同的部分存入a,然后用Hashtable b =new Hashtable( a )
    然后再去将a,b中不同的数据分别存入a,b
      

  5.   

    谢谢楼上的各位,大概是明白了,我原来的想法,中途去单独改变b中某一个的值是没办法完成的,hashtable就不能像我想的那样用。