2011-06-03 70 views
2

我想製作一個對象引用的散列表,並且我希望將不同對象的引用作爲關鍵字。我如何在vb.net中做到這一點?獲取vb.net中對象引用的字符串表示形式

在java中(假設我現在用的是默認的toString方法和附加()接受一個字符串作爲重點和對象REF的值),這將是這樣的:

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

我不想要使用vb.net gethashcode()函數,因爲我想深入克隆對象具有不同的標識符。

相關的問題是vb.net中的默認toString是什麼?

總結:如何獲取表示vb.net中對象引用的字符串?

回答

2

如果你希望對象引用是哈希表的關鍵,那麼就使用對象本身。

hashtable.Add(obj1, obj2) 

要回答你的第二個問題ToString在VB.Net默認的實現是調用到Object.ToString。在.NET中,這將打印出底層的實例的類型名稱

+0

我正在嘗試使用您推薦的代碼,並且哈希表使用整數作爲鍵。 – Ray 2011-06-03 15:14:47

+0

@射線爲什麼你選擇整數? – JaredPar 2011-06-03 15:15:59

+0

我沒有,但那是Add()方法爲我做的。 – Ray 2011-06-03 15:22:09

0

你會好得多使用強類型的字典:

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

你假設OP在散列表中使用統一類型 – JaredPar 2011-06-03 15:08:18

+0

是的,的確如此。 – ic3b3rg 2011-06-03 15:09:54

+0

字典是否隱式調用gethashcode()? – Ray 2011-06-03 15:19:37

0

一種可能性(雖然我不能說我會推薦這是出於許多原因)是使用.net等效的VB6 ObjPtr函數。實質上,你把對象固定在內存中,然後你可以爲那個對象檢索一個內存地址(這是保證唯一的)。

看到這張貼

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

或者,如果我真的需要一個對象的唯一標識,我可能會擴展對象,並添加一個「對象ID」只讀屬性,它總是返回一個生成的GUID針對該對象的特定實例。

如果這些ID沒有在任何地方持久存在,您也可以創建一個單獨的「IDGenerator」對象,它只是遞增遞增的整數,並將這些int用作對象的ID。但是,再次,您不會想要堅持這些int id,因爲它們在您的應用程序的運行中不會是唯一的。另外,根據你正在實例化的對象數量,你可能需要將它設置爲long int而不僅僅是int。

相關問題