c# hashtable问题

zhangning111 2008-11-18 03:16:11
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中么
...全文
163 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangning111 2008-11-18
  • 打赏
  • 举报
回复
基本搞清楚了 不过实现起来太麻烦了
什么规定嘛 发贴一天才能加分 俺记性不好忘了咋办
hwk5 2008-11-18
  • 打赏
  • 举报
回复
c#中没有指针一说,那么就没有指向指针的指针,所以这里你只能手动的控制
hwk5 2008-11-18
  • 打赏
  • 举报
回复
我们分析一下就知道了:
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"]就指向了不同的地址

所以二个值就不一样了.
我姓区不姓区 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhangning111 的回复:]
是不是说我把aa放到一个类中就行了呢 或者装箱行不行呢
偶去试试
[/Quote]
值类型的对象都是不可以的,你把值类型放到一个类中,然后放入HashTable的Value是肯定可以的
zhangning111 2008-11-18
  • 打赏
  • 举报
回复
是不是说我把aa放到一个类中就行了呢 或者装箱行不行呢
偶去试试
zhangning111 2008-11-18
  • 打赏
  • 举报
回复
是不是说我把aa放到一个类中就行了呢 或者装箱行不行呢
偶去试试
卧_槽 2008-11-18
  • 打赏
  • 举报
回复
不能,所有的容器类型都是值传递,不是引用传递。
bbbbbb888888 2008-11-18
  • 打赏
  • 举报
回复
自己定义属性和事件,属性变更,出发事件,aa也跟着变.
zhangning111 2008-11-18
  • 打赏
  • 举报
回复
to:blooish

我本意就是希望用hash表通过key "a"访问aa
直接赋值回去就没意义了
我甚至考虑aa是动态创建的,方便自动操作
bbbbbb888888 2008-11-18
  • 打赏
  • 举报
回复
datetime是值类型(结构)吧.
zhangning111 2008-11-18
  • 打赏
  • 举报
回复
怎么是aa的值也能改呢 就如同c++中指针的指针一样
bloodish 2008-11-18
  • 打赏
  • 举报
回复
既然你可以这样设置: table["a"] = DateTime.Today.AddMonths(1);
为什么不这样再读取一次呢? aa = (DateTime)table["a"]
bloodish 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangning111 的帖子:]
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());


[/Quote]

table["a"] = DateTime.Today.AddMonths(1);
这句执行之后Hastable里key "a"对应的值已经改了
但是aa的值是改不掉的...你自己也说了是DateTime是值类型
zhangning111 2008-11-18
  • 打赏
  • 举报
回复
两个messagebox显示不一样 aa值没变table和aa已经脱离联系了
abcyzq 2008-11-18
  • 打赏
  • 举报
回复
顶,
我姓区不姓区 2008-11-18
  • 打赏
  • 举报
回复
有什么问题?单看代码没有问题啊

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧