2010-12-07 27 views
1

Supposant J'ai la ligne de code C#:EnvDTE.Expression - Obtenir le nom interne de DataMembers programme

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

Et je mets « myList » dans la fenêtre Espion, puis faites glisser le 1er élément de la liste vers le bas, la fenêtre montre crée une nouvelle ligne avec le nom interne de ce membre de données, qui dans ce cas serait

(nouveau System.Collections.Generic.Mscorlib_CollectionDebugView (myList)). Articles [0]

Ma question est, est-il un moyen d'obtenir ce programme nom interne de DataMember de l'expression d'un EnvDTE?

Merci beaucoup!

Répondre

0

Non, vous pouvez tout simplement pas. Vous devez rouler le vôtre.

0

Je n'ai pas la recette complète, mais je vois que List<T> a attribut personnalisé System.Diagnostics.DebuggerTypeProxyAttribute set avec ProxyTypeName ensemble à System.Collections.Generic.Mscorlib_CollectionDebugView'1. Ce qui, si je comprends bien, signifie que dans les fenêtres de surveillance vous voyez réellement ce type de proxy, pas l'original. Peut-être que cela peut vous orienter dans la bonne direction.

Pour obtenir l'attribut je l'ai fait:

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

Merci, peut-être que j'aurais dû le mentionner dans le message original, mais je le sais déjà. Je pourrais faire un peu d'ingénierie inverse et d'inspecter les attributs du débogueur, et comprendre ce que fait l'évaluateur d'expression, mais ce que je demande, c'est s'il y a un moyen d'obtenir cette chaîne directement à partir de Visual Studio Extensibility API. –

+0

Je ne vois aucune fonctionnalité qui ferait exactement cela. Je travaille avec cette API en ce moment, je pense que j'aurais remarqué s'il y avait quelque chose. – detunized

+0

Merci pour le commentaire, utilisez-vous l'objet Expression d'EnvDTE, ou IDebugProperty2 :: GetPropertyInfo? Je soupçonne que ce dernier pourrait donner une solution, mais je n'ai aucune idée de la façon d'atteindre cet objet. –