【问题标题】:Dictionary with untyped pointer as key type以无类型指针作为键类型的字典
【发布时间】:2013-12-17 23:29:35
【问题描述】:

首先,这是我在这里的第一个问题,所以如果我做错了什么,请告诉我。

我正在为 Unity 编写几个有点复杂的 C# 脚本,目前我需要一个字典映射,从未知类型的指针到类型的对象实例,具体取决于键指针的类型:

(void* => MyClass<T>)

其中 T 是每个条目的键指针的目标类型。

首先,我应该如何指定密钥类型? void* 似乎无效。

其次,有没有一种优雅的方式来指定类型绑定?否则我可能会即兴发挥解决方案。

【问题讨论】:

  • void * 在 C# 中没有意义,我猜你的意思是 object
  • 这对于一个对 C# 知之甚少的人来说有点复杂,以至于他认为void* 是个好主意。
  • 你怎么知道你需要这种类型的字典?您有链接或要查看的内容吗?
  • 感谢更正标题!我使用它的目的相当深奥,我不想离主题太远。

标签: c# pointers dictionary void


【解决方案1】:

正如您已经发现 C# 中的指针类型不能用作 Dictionary&lt;TKey, TValue&gt; 的键类型。 IntPtr 值可以,并且每个 void* 都可以转换为 IntPtr。因此我会使用Dictionary&lt;IntPtr, MyClass&lt;T&gt;&gt; 并将void* 值映射到IntPtr

unsafe class Container<T> { 
  Dictionary<IntPtr, MyClass<T>> m_map;
  void Add(void* key, MyClass<T> value) { 
    IntPtr ptr = (IntPtr)key;
    m_map.Add(ptr, value);
  }

  bool TryGetValue(void* key, out MyClass<T> value) { 
    IntPtr ptr = (IntPtr)key;
    return m_map.TryGetValue(ptr, out value);
  }
}

【讨论】:

  • 谢谢!关于第二个问题,我所有的方法无论如何都会有类型参数,所以这甚至不相关。无论如何,我可能会使用稍微不同的方法,因为我现在意识到(这种感觉)指针可能太脆弱了,但这超出了主题。
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 2015-09-03
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 2023-03-12
相关资源
最近更新 更多