C#中VB6的ObjPtr的等价(功能)?

问题描述:

是否有人知道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

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

如果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

我能想到的最接近的直接等价物就是使用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

如果他们的对象,为什么不直接存储对象引用?这些将是独一无二的。

您可以使用Object.ReferenceEquals(x, y)来确定您存储的引用是否指向刚刚从树中检索的同一对象。