5

コレクション(ICollectionICollection<T>)オブジェクトを視覚化するためにグリッド付きのフォームを作成しました。

その後、デバッガービジュアライザークラス(から継承Microsoft.VisualStudio.DebuggerVisualizers.DialogDebuggerVisualizer)を作成しました。

ビジュアライザーは適切にインストールされています(System.Collections.ArrayListクラスで試しました)。

しかし、ビジュアライザーを任意のICollection/ICollection<T>タイプに一般化することに問題があります。

属性を指定しました:

[assembly: DebuggerVisualizer( typeof( DebugerSide ), typeof( VisualizerObjectSource ), Target = typeof( System.Collections.Generic.ICollection<> ), Description = "Collection visualizer" )]
[assembly: DebuggerVisualizer( typeof( DebugerSide ), typeof( VisualizerObjectSource ), Target = typeof( System.Collections.ICollection ), Description = "Collection visualizer" )]

ただし、ビジュアライザーはVSによってデバッグで提供されません。

正確なクラス名を指定すると、ビジュアライザーはVSで使用できます。私の意図を実行する方法はありますか、それともそれを達成する方法はありませんか?

ありがとう!

4

2 に答える 2

9

この質問で概説したのと同じビジュアライザーアーキテクチャの制限に遭遇したと思います。

回避策は、System.WeakReferenceのビジュアライザーを作成し、ウォッチウィンドウに「newWeakReference(myCollectionVariable)」と入力すると、weakreferenceでデバッグビジュアライザーを開くことができるようになります。デバッグビジュアライザー内では、リフレクションを使用して、変数のタイプが正確に何であるかを調べ、それを使って好きなことを行うことができます。

こちらもご覧ください

于 2011-07-11T16:01:43.780 に答える
0

これはうまくいくと思います。

[assembly: DebuggerVisualizer( typeof( DebugerSide ), typeof( VisualizerObjectSource ), typeof(Collection), Description = "Collection visualizer" )]
于 2013-04-19T09:27:12.360 に答える