2010-12-07 11 views
1

Iは、C#コード行有し仮に:EnvDTE.Expression DataMembersの内部名を取得プログラム

するvarます。myList =新しいリスト{1,2,3}。

ウォッチウィンドウに「myList」を置き、リストの最初の項目をドラッグすると、このデータメンバーの内部名を持つウォッチウィンドウが作成されます。この場合、

プログラムでEnvDTEの表現のデータメンバーからこの内部名を取得する方法は

(新しいSystem.Collections.Generic.Mscorlib_CollectionDebugView(はmyList))。アイテム[0]

私の質問は、ありますか?

ありがとうございます!

答えて

0

いいえ、あなただけのことはできませんが。あなたはあなた自身を転がす必要があります。

0

私は完全なレシピを持っていないが、私はList<T>、カスタムSystem.Collections.Generic.Mscorlib_CollectionDebugView'1ProxyTypeNameセットでSystem.Diagnostics.DebuggerTypeProxyAttributeセット属性していることがわかります。私が理解しているように、ウォッチウィンドウでは、元のプロキシタイプではなく、実際にプロキシタイプを参照していることを意味します。たぶん正しい方向に向けることができます。

私がした属性を取得するには、次の

myList.GetType().GetCustomAttributes(false); 
+0

私は元の投稿でこれを述べていたはずですが、私はすでにそれを知っています。いくつかのリバースエンジニアリングとデバッガの属性の検査を行い、Expression Evaluatorが何をしているのか把握することができますが、Visual StudioのExtensibility APIからこの文字列を直接取得する方法があれば尋ねられます。 –

+0

私はそれを正確に行う機能はありません。私は現時点でこのAPIを使って作業していますが、何かがあれば気づいたと思います。 – detunized

+0

コメントのおかげで、EnvDTEのExpressionオブジェクト、またはIDebugProperty2 :: GetPropertyInfoを使用していますか?私は、後者が解決策をもたらすかもしれないと思うが、そのオブジェクトをどうやって得るのか分からない。 –

関連する問題