Сгладить унаследованные элементы в окне просмотра Visual Studio? - PullRequest
22 голосов
/ 17 февраля 2010

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

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

Ответы [ 2 ]

8 голосов
/ 27 января 2011

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

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

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

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

After adding stars

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

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

4 голосов
/ 17 февраля 2010

Не как таковой. Вы видите, это особенность! Возможность видеть, откуда берется имущество, важна в большинстве случаев.

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

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

Удачи и удачной охоты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...