我有一个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()方法的值的副本,而不是传递给该方法的变量的引用。

要解决此问题,您需要将整数包装在引用类型(一个类)中,并为映射提供对该类所需实例的引用。然后,确保无论何时更改整数,都将其更改为正确实例的成员。

09-08 04:36