.net - 在 .NET 中使用 Hashtable 将指针映射到不可变对象(immutable对象)

标签 .net c++ pointers hashtable immutability

我有一个 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。

进一步查询我的哈希表,但值没有改变。我明白这是因为它们是不可变的。有没有一种方法可以指定我的哈希表来保存指向我的类的字段的指针,而不是存储引用的值?

我知道我可以修改 Interrupt 类来保存自定义对象而不是原始 int,但它会涉及大量重构。

最佳答案

I understand that it is because they are immutable.

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

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

关于.net - 在 .NET 中使用 Hashtable 将指针映射到不可变对象(immutable对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1301051/

相关文章:

c - 通过引用将变量传递给另一个函数时变量的值发生变化

.net - 我应该如何优化 .net 代码中对一个简单存储过程的多次调用?

c# - 套接字通讯失败

c++ - OpenCV 找不到库

c++ - 用已知公式求解缺失变量

c++ - 为什么类成员包含 "std::shared_ptr<std::thread>"时会发生崩溃?

c - 传递 char* 指针时出现段错误

c# - 我可以从我的应用程序中抛出哪些内置 .NET 异常?

c# - Web 应用程序和网站中的 app_data 文件夹有什么区别?

c++ - 根据我的测试,[更有效的 C++] 中的第 3 项似乎无效