1

我有一个 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 来保存自定义对象而不是原始 int,但它会涉及很多重构。

4

3 回答 3

3

我知道这是因为它们是不可变的。

你理解错了。是的,整数是不可变的。但是映射值没有改变,因为整数是值类型,因此按值传递给映射的 Add() 方法。换句话说,映射保存了传递给 Add() 方法的值的副本,而不是对传递给该方法的变量的引用。

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

于 2009-08-19T16:21:17.437 回答
1

您可以将其更改为让您的 Hashtable 仅保存对您的类本身(中断)的引用,而不是单个 int 值。这样,您可以根据实例查找 int 值。

于 2009-08-19T16:20:50.557 回答
0

如果您使用字典,并传递成员的地址,它将起作用......只要中断对象被固定。然而,由于 Interrupt 是一个 ref 类,这也将涉及大量工作。老实说,我认为最好的办法就是现在咬紧牙关,进行重构,因为这似乎是正确的事情™。

于 2009-08-19T16:29:49.057 回答