我有一个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,但是值没有改变。我知道这是因为它们是不可变的。有没有一种方法可以指定哈希表来保存指向类字段的指针,而不是存储引用的值?
我知道我可以修改Interrupt类以容纳自定义对象,而不是原始的int,但这会引起很多重构。
最佳答案
你理解错了。是的,整数是不可变的。但是 map 值没有改变,因为整数是值类型,因此按值传递给 map 的Add()方法。换句话说,该映射保留传递给Add()方法的值的副本,而不是传递给该方法的变量的引用。
要解决此问题,您需要将整数包装在引用类型(一个类)中,并为映射提供对该类所需实例的引用。然后,确保无论何时更改整数,都将其更改为正确实例的成员。