2010-12-07 18 views
1

Angenommen ich die C# Codezeile haben:EnvDTE.Expression - Getting den internen Namen von Datamembers programmatisch

var myList = new List {1,2,3};

und ich habe „myList“ im Fenster Uhr, und dann das erste Element der Liste nach unten ziehen, erstellt das Überwachungsfenster eine neue Zeile mit dem internen Namen dieses Datenelementes, das würde in diesem Fall

(neu System.Collections.Generic.Mscorlib_CollectionDebugView (myList)). Artikel [0]

Meine Frage ist, gibt es eine Möglichkeit, programmatisch diese internen Namen des Datamember aus einem EnvDTE Ausdruck zu bekommen?

Vielen Dank!

Antwort

0

Nein, Sie nicht nur können. Sie müssen selbst rollen.

0

Ich habe das komplette Rezept nicht, aber ich sehe, dass List<T> benutzerdefinierten System.Diagnostics.DebuggerTypeProxyAttribute Set mit ProxyTypeName Satz System.Collections.Generic.Mscorlib_CollectionDebugView'1 hat zuzuschreiben. Was, wie ich es verstehe, bedeutet, dass Sie in den Überwachungsfenstern diesen Proxy-Typ sehen, nicht den Original-Typ. Vielleicht kann dies dich in die richtige Richtung weisen.

das Attribut erhalte ich tat:

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

Danke, vielleicht hätte ich das im Originalbeitrag erwähnen sollen, aber das weiß ich schon. Ich könnte etwas Reverse Engineering durchführen und die Debugger-Attribute untersuchen und herausfinden, was der Expression Evaluator tut, aber ich möchte wissen, ob es eine Möglichkeit gibt, diese Zeichenfolge direkt von der Extensibility-API von Visual Studio zu beziehen. –

+0

Ich sehe keine Funktionalität, die genau das tun würde. Ich arbeite mit dieser API im Moment auch, ich denke, ich hätte bemerkt, wenn es etwas gäbe. – detunized

+0

Danke für den Kommentar, verwenden Sie das Expression-Objekt von EnvDTE, oder IDebugProperty2 :: GetPropertyInfo? Ich vermute, dass Letzteres eine Lösung liefern könnte, aber ich habe keine Ahnung, wie ich zu diesem Objekt komme. –