日期:2014-05-18  浏览次数:20767 次

寻求有关Hashtable赋值的解决方案
我现在遇到这样一个问题:
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]赋值的方法。

------解决方案--------------------
顶一下。
------解决方案--------------------
C# code

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

------解决方案--------------------
你知道是指针还这么玩...
你的第一种是把a给变了.就用b=a.clone(),不新开还能咋样,一个变另一个不变本来就是两个不同的变量
你的第二种还不是两个块内存,又多了个循环..
------解决方案--------------------
2楼的有道理
应该是Hashtable b =new Hashtable( a );
------解决方案--------------------
以前一直是循环赋值,学习下
------解决方案--------------------
如果a和b要存储相同的数据
那就用Hashtable b =new Hashtable( a )
如果a和b存储的不是相同的数据,而只有一部分相同
你可以先将相同的部分存入a,然后用Hashtable b =new Hashtable( a )
然后再去将a,b中不同的数据分别存入a,b