Подтвердить что ты не робот

Сгладить унаследованные элементы в окне Visual Studio Watch?

Есть ли способ заставить окно "Смотреть" отображать все унаследованные свойства и поля в одном длинном плоском списке, а не скрываться за вложенной "базой" node?

Я отлаживаю некоторый код С#, который делает массивное использование наследования - некоторые из свойств, которые я хочу наблюдать, находятся за тремя уровнями "базы" в окне "Часы". Это было бы более или менее терпимо, если бы я просто хотел рассмотреть один такой объект, но я на самом деле смотрю на дерево из них...

4b9b3361

Ответ 1

см. http://blogs.msdn.com/b/jaredpar/archive/2010/02/19/flattening-class-hierarchies-when-debugging-c.aspx

ОБНОВЛЕНИЕ: Я написал коммерческий инструмент под названием OzCode, который решает эту проблему. Идея состоит в том, что если вы заинтересованы в свойстве базового класса, вы можете "Star" это свойство, которое заставляет свойство отображаться в верхней части списка участников, а также в тексте его родителя.

Итак, например, в следующем сценарии мне пришлось развернуть два базовых узла, чтобы увидеть нужные свойства "Важные" и "Интересные": No Stars

Но как только я закрою эти свойства, они всегда будут отображаться вверху, даже если вы просматриваете переменные типа Derived, поэтому я увижу:

After adding stars

Эти звезды сохраняются и будут отображаться всякий раз, когда вы просматриваете объект этого типа в окне DataTip или QuickWatch с этого момента на, поэтому в следующий раз, когда вы будете переменными этого типа, вам не нужно будет расширять эти "базовые" узлы. И поскольку отмеченные значения отображаются в виде родительского текста node, если вы смотрите на структуру дерева данных этих сильно вложенных объектов (как вы заявили, что были), вы сможете увидеть эти свойства, даже не увеличивая количество узлов.

ПОЛНОЕ РАСКРЫТИЕ. Я являюсь соавтором инструмента, описанного здесь.

Ответ 2

Не как таковой. Понимаете, это особенность! Способность видеть, откуда происходит свойство, важна большую часть времени.

Я понимаю вашу боль. Есть несколько работ. Во-первых, вы можете просто поместить object.property в окно просмотра. Это просто отобразит свойство, которое вы ищете. Это отлично подходит для копания в определенном свойстве, но не для того, чтобы получить все остальные.

Вы также можете попробовать (BaseClass) объект. Это приведет его к базовому объекту, который содержит свойство (свойства?), Которое вы ищете. Опять же, это отлично подходит для поиска определенного подмножества свойств, но полностью скрывает все остальные.

Удачи и хорошей охоты.