我有一个Hashtable对象,用一个字符串“命名”或“映射”一个类中的各个字段
ref class Interrupt{
Interrupt(){
this->type = 0;
this->size = 0;
}
int type;
int size;
}
Interrupt^ interrupt = gcnew Interrupt();
Hashtable^ map = gcnew Hashtable();
map->Add("InterruptType", interrupt->type);
map->Add("InterruptSize", interrupt->size);
此类在运行时被修改,因此类型和大小都等于2。
在路上我查询我的Hashtable,但值没有改变。我明白这是因为它们是不可改变的。有没有办法可以指定我的Hashtable来保存指向我的类的字段的指针,而不是存储引用的值?
我知道我可以修改类Interrupt来保存自定义对象而不是raw int,但它会侵犯很多重构。
答案 0 :(得分:3)
我明白这是因为它们是不可改变的。
你理解错了。是的,整数是不可变的。但是地图值没有改变,因为整数是值类型,因此按值传递给地图的Add()方法。换句话说,映射包含传递给Add()方法的值的副本,而不是对传递给方法的变量的引用。
要解决此问题,您需要将整数包装在引用类型(类)中,并为映射提供对该类所需实例的引用。然后确保无论何时更改整数,您都要将它们更改为正确实例的成员。
答案 1 :(得分:1)
您可以更改它以使您的Hashtable只保存对类本身的引用(中断)而不是单个int值。这样,您可以根据实例查找int值。
答案 2 :(得分:0)
如果您使用了Dictionary,并且传递了该成员的地址,那么只要中断对象被固定,它就会起作用。但是,由于Interrupt是一个ref类,因此也会涉及很多工作。老实说,我认为你最好的办法就是现在咬紧牙关,然后进行重构,因为它似乎是正确的事情。