2

我想制作一个对象引用的哈希表,并且我希望另一个对象的引用成为关键。我怎样才能在 vb.net 中做到这一点?

在 java 中(假设我使用默认的 toString 方法并且 add() 将字符串作为键和对象 ref 作为值),这将类似于:

hashtable.add(obj1.toString(), obj2)

我不想使用 vb.net gethashcode() 函数,因为我希望对象的深层克隆具有不同的标识符。

一个相关的问题是 vb.net 中的默认 toString 是什么?

总结:如何在 vb.net 中获取表示对象引用的字符串?

4

3 回答 3

2

如果您希望对象引用成为哈希表的键,那么只需使用对象本身。

hashtable.Add(obj1, obj2)

要回答您的第二个问题ToString,VB.Net 中的默认实现是调用Object.ToString. 在 .Net 中,这将打印出底层实例的类型名称

于 2011-06-03T15:04:54.160 回答
1

一种可能性(尽管出于多种原因我不能说我会推荐这个)是使用 .net 等效的 VB6 ObjPtr 函数。本质上,您将对象固定在内存中,然后您可以检索该对象的内存地址(保证是唯一的)。

看到这个帖子

http://forums.devx.com/showthread.php?t=122407

或者,如果我真的需要一个对象的唯一标识符,我可能会扩展该对象并添加一个“ObjectID”只读属性,该属性始终为该对象的特定实例返回生成的 GUID。

如果这些 ID 没有保留在任何地方,您还可以创建一个单例“IDGenerator”对象,它只是分发递增的 int,并将这些 int 用作您的对象的 ID。但同样,您不希望保留这些 int id,因为它们在您的应用程序的运行中不会是唯一的。此外,根据您要实例化的对象数量,您可能需要将其设为 long int 而不仅仅是 int。

于 2011-06-03T15:38:30.870 回答
0

使用强类型字典会好得多:

Dim myDict As New Dictionary(Of myObject1Type,myObject2Type)
myDict(obj1) = obj2
于 2011-06-03T15:06:59.953 回答