2010-12-07 2 views
1

Предположив У меня есть C# строки кода:EnvDTE.Expression - Получение внутреннее имя DataMembers программно

вар MyList = новый список {1,2,3};

И я поставил «MyList» в окне Watch, а затем перетащить 1-й элемент списка вниз, окно часы создает новую строку с внутренним именем этого элемента данных, который в этом случае будет

(новый System.Collections.Generic.Mscorlib_CollectionDebugView (MyList)). Items [0]

Мой вопрос, есть ли способ программно получить это внутреннее имя от DataMember Expression приведен EnvDTE в?

Большое спасибо!

ответ

0

Нет, вы просто не можете. Вы должны катиться самостоятельно.

0

Я не полный рецепт, но я вижу, что List<T> имеет пользовательский атрибут System.Diagnostics.DebuggerTypeProxyAttribute набор с ProxyTypeName набором для System.Collections.Generic.Mscorlib_CollectionDebugView'1. Который, как я понимаю, означает, что в окнах часов вы действительно видите этот тип прокси, а не оригинальный. Возможно, это может указывать на вас в правильном направлении.

Чтобы получить атрибут я сделал:

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

Спасибо, возможно, я должен был упомянуть об этом в исходном посте, но я это уже знаю. Я мог бы сделать некоторую обратную разработку и проверить атрибуты отладчика, и выяснить, что делает Expression Evaluator, но я спрашиваю, есть ли способ получить эту строку непосредственно из API расширяемости Visual Studio. – 2010-12-07 16:43:03