2009-09-03 20 views
1

C#にVB6や同等の機能を持つObjPtrと同等のものがあるかどうかは知っていますか? ObjPtr devxthevbzoneに関する情報へのリンクがいくつかあります。C#のVB6からのObjPtrに相当する(機能性)?

基本的には、特定のノードを取得するためには歩く必要のあるサードパーティのツリービューがありますが、ノードの名前(唯一の)情報は名前ですが、ノード名は一意である必要はありません。だから私は最初にそれを通って歩くときに私は再びそれを通って歩くとき、私はどちらが知っている各ノードのためのユニークな価値を得る必要があります。古い学校でVB6の日に私はObjPtrを使用します。

ご意見やご提案はありますか?

FK

+0

あなたの説明から、なぜあなたが 'ObjPtr'を使用したのか分かりません。これは本当の低レベルのハッキーなことです。あなたの場合、 'Is 'を使った単純なオブジェクトの平等テストで十分です。あなたは詳しく説明できますか? –

+0

よくObjPtrが最適な選択肢ではなかったかもしれませんが、私は大きなコードベースを引き継いでいました。この場合、再び古いコードベースが再びあります...コードをさらに更新すると "IS"が機能するかもしれません。ツリービューの初期ウォークスルーは、参照する配列に名前を格納するだけです。比較するオブジェクト自体はありません。 –

+0

オブジェクト参照を保存しないのはなぜですか?名前の保存に比べて不都合はありません。高速で、同じ量のメモリを使用します。 – MarkJ

答えて

-2

GetHashCodeは、サードパーティがあなたのシナリオでは意味がありません何かを持つオブジェクトの実装をオーバーライドしていない限り、一意の値をテストするためにうまく動作するはずです。

私は、ツリー内のノードが値ストリング以上の平等性/ハッシュコードを定義すると仮定しますが、チェックする必要があります。

+0

-1。 "GetHashCodeメソッドの既定の実装は、異なるオブジェクトの一意の戻り値を保証しません**。"これは、*ハッシュ*でユニークな識別子を提供しないことを意図しています。MSDNのこちらから:http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx – MarkJ

+0

-1ハッシュコードは意図されていないため –

1

フルテキストプロパティを持つツリーノードの場合、ツリービュー内のノードを一意に識別するために使用できます(WinformsツリービューにはFullPathというプロパティがあります)。 2人の兄弟に同じテキストがある場合、これは一意ではありません。

OR

あなたはツリーノードのHandleプロパティを使用することができます。

+0

質問はサードパーティのツリービューだと言っているので、標準的なプロパティはないかもしれません。 – MarkJ

+0

@マーク:それが理由です。 ":) – shahkalpesh

1

私が考えることができる最も近い直接の同等物は、GCHandleを使用してオブジェクト参照のIntPtrを取得することです。

オブジェクト(GCHandle.Alloc)にGCHandleを割り当て、次にGCHandle.ToIntPtrを使用してIntPtrに変換する必要があります。リンクされたドキュメンテーションはプロセスを示します。

+0

私はあなたが正しいと思います - これはObjPtrに最も近いものです - しかし、私はFKCoderがこの原子爆弾を使って特定のクルミを裂くべきだとは思わない – MarkJ

+0

私は同意します - しかし私は直接質問に答えようとしていました、 いずれかの方法。 –

2

オブジェクトの場合は、オブジェクト参照を直接格納するだけではどうですか。これらはユニークなものになります。

Object.ReferenceEquals(x, y)を使用して、保存した参照がツリーから取得したのと同じオブジェクトを参照しているかどうかを判断できます。