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

c# hashtable问题
C#要用一个hashtable方便查找和更改数据,在更改的时候出了问题。

DateTime aa = new DateTime();
aa = DateTime.Today.AddMonths(-1);
System.Collections.Hashtable table = new System.Collections.Hashtable(53,0.5f);
table.Add("a", aa);
table["a"] = DateTime.Today.AddMonths(1);
MessageBox.Show("aa=" + aa.ToShortDateString());
MessageBox.Show(((DateTime)table["a"]).ToShortDateString());


我希望更改aa的数据,但是没改成。可能是hashtable的value不应该放aa,
而是放aa的引用或者指向aa的指针,有这样的东西么,能放在hash中么


------解决方案--------------------
自己定义属性和事件,属性变更,出发事件,aa也跟着变.
------解决方案--------------------
不能,所有的容器类型都是值传递,不是引用传递。
------解决方案--------------------
探讨
是不是说我把aa放到一个类中就行了呢 或者装箱行不行呢
偶去试试

------解决方案--------------------
我们分析一下就知道了:
DateTime aa = new DateTime();
aa = DateTime.Today.AddMonths(-1);
System.Collections.Hashtable table = new System.Collections.Hashtable(53,0.5f);
table.Add("a", aa);

这里 aa和table["a"]指向相同的地址

table["a"] = DateTime.Today.AddMonths(1);
这里做了一个动作AddMonths(1)操作,注意,这里是返回了一个新地址
那么这里就把table["a"]指向了这个新地址
现在aa和table["a"]就指向了不同的地址

所以二个值就不一样了.