2009-09-03 35 views
1

是否有人知道C#是否具有與VB6等效的ObjPtr或等效功能(請參閱下面的更多信息)?這裏有一些關於ObjPtr devxthevbzone的鏈接。C#中VB6的ObjPtr的等價(功能)?

基本上我有第三方樹視圖,我需要通過獲取特定節點,但節點具有的唯一(相關)信息是名稱...但節點名稱不必是唯一的。所以當我第一次走過它時,我需要爲每個節點獲得一個獨特的值,所以當我再次走過時,我知道哪個是哪個節點。在舊學校VB6的日子裏,我會使用ObjPtr。

任何想法或建議?

FK

+0

從你的描述,我不明白爲什麼你使用'ObjPtr'。這是一個真正的低級哈希事情,聽起來就像在你的情況下,通過'Is'進行簡單的對象相等測試就足夠了。你能詳細說明一下嗎? – 2009-09-03 17:08:35

+0

那麼ObjPtr可能不是最好的選擇,但我接管了一個龐大的代碼庫,它被用在整個代碼中......並且它工作。在這種情況下,再次是舊的代碼庫...如果我更多地更新代碼,「IS」可能會工作,現在樹視圖的初始遍歷只存儲數組中的名稱以便引用回來,所以我不用沒有物體本身可以與之比較。 – 2009-09-03 17:49:46

+0

爲什麼不存儲對象引用?與存儲名稱相比沒有什麼不利之處。同樣快,並使用相同數量的內存。 – MarkJ 2009-09-04 08:31:34

回答

-2

GetHashCode應,除非第三方已重寫的東西,沒有意義在方案對象實現測試的獨特的價值觀很好地工作。

我會假設樹中的節點將通過不僅僅是值字符串定義相等/散列碼,但您需要檢查。

+0

-1。 「GetHashCode方法的默認實現不**保證不同對象的唯一返回值。「它的目的是* hashing *不提供唯一的標識符。從MSDN這裏:http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx – MarkJ 2009-09-04 08:28:53

+0

-1哈希代碼是不打算和 – 2009-09-04 08:37:03

1

如果treenode具有FullPath屬性,則可以使用它來唯一標識樹視圖中的節點(Winforms Treeview具有FullPath屬性)。如果兩個兄弟姐妹在其中具有相同的文本,這將不是唯一的。

OR

您可以使用樹節點的Handle財產。

+0

問題確實說它是第三方樹形視圖,因此它可能沒有標準屬性 – MarkJ 2009-09-04 08:27:17

+0

@Mark:這就是我開始的原因,「如果treenode具有.... 「:) – shahkalpesh 2009-09-04 16:11:33

1

我能想到的最接近的直接等價物就是使用GCHandle獲取IntPtr作爲對象引用。

您需要爲對象分配GCHandle(GCHandle.Alloc),然後使用GCHandle.ToIntPtr轉換爲IntPtr。鏈接的文檔顯示過程。

+0

我認爲你是正確的 - 這是最接近的相當於ObjPtr - 但我不認爲FKCoder應該使用這個原子彈來破解他的核桃 – MarkJ 2009-09-05 09:01:31

+0

我同意 - 但我試圖直接回答這個問題, 無論如何。 – 2009-09-05 18:20:17

2

如果他們的對象,爲什麼不直接存儲對象引用?這些將是獨一無二的。

您可以使用Object.ReferenceEquals(x, y)來確定您存儲的引用是否指向剛剛從樹中檢索的同一對象。