【问题标题】:get string representation of object reference in vb.net在 vb.net 中获取对象引用的字符串表示形式
【发布时间】:2011-06-03 15:02:32
【问题描述】:

我想创建一个对象引用的哈希表,并且我希望另一个对象的引用成为关键。如何在 vb.net 中做到这一点?

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

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

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

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

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

【问题讨论】:

    标签: vb.net hashtable tostring object-reference


    【解决方案1】:

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

    hashtable.Add(obj1, obj2)
    

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

    【讨论】:

    • 我尝试使用您推荐的相同代码,而哈希表使用整数作为键。
    • @Ray 你为什么选择整数?
    • 我没有,但这就是 Add() 方法为我所做的。
    【解决方案2】:

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

    看到这个帖子

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

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

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

    【讨论】:

      【解决方案3】:

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

      Dim myDict As New Dictionary(Of myObject1Type,myObject2Type)
      myDict(obj1) = obj2
      

      【讨论】:

      • 您假设 OP 在哈希表中使用统一类型
      • 这让我觉得它确实使用了 gethashcode():“只要一个对象被用作 Dictionary(Of TKey, TValue) 中的键,它就不能以任何方式改变影响其哈希值” - API
      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多