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"]就指向了不同的地址
所以二个值就不一样了.