Как заставить ToString() отображаться в Debug

Я бы хотел, чтобы ToString() отображался для класса под моим контролем в режиме отладки.

Было бы неплохо, если бы это было первое, что появилось, когда вы наводите указатель мыши на переменную с помощью мыши. Есть ли для этого атрибут?

Ответ 1

Отметьте свой класс

[System.Diagnostics.DebuggerDisplay("{ToString()}")]

Тест:

[System.Diagnostics.DebuggerDisplay("{ToString()}")]
class MyClass
{
    private string _foo = "This is the text that will be displayed at debugging"

    public override string ToString()
    {
        return _foo;
    }
}

Теперь, когда вы наведите указатель мыши на переменную с помощью мыши, она покажет This is the text that will be displayed at debugging.

Ответ 2

Существует DebuggerDisplayAttribute, который позволяет влиять на отображение. Он позволяет писать довольно сложные выражения для вывода вывода отладки, хотя не рекомендуется делать это.

Однако, если вы переопределили ToString, тогда отладчик документально отобразит его по умолчанию. Может быть, что-то не так с кодом?

Ответ 3

Что вы ищете, это DebuggerDisplayAttribute:

http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute

Используйте приведенную выше ссылку, чтобы узнать, как это сделать, а затем примените ее к вашему классу, используя метод ToString(), чтобы вести то, что показано. Я только использовал свойства, но не уверен, что вы можете вводить классы.

Ответ 4

Вывод ToString должен быть по умолчанию, который вы видите при отладке.

Он может быть переопределен с помощью атрибута DebuggerDisplay (см. MSDN).

Я предпочитаю переопределять метод ToString, потому что он проще и универсальнее, потому что он помогает при записи в файлы журнала.

Какой результат вы видите? Если вы получите имя типа, вы увидите по умолчанию ToString.

Ответ 5

в объекте Переопределите .ToString следующим образом:

public class MyObject
{
        public int Property1{ get; set; }
        public string Property2{ get; set; }
        public string Property3 { get; set; }

        public override string ToString()
        {
            return Property3;
        }
}

Это вернет Property3 в качестве значения ToString()

Ответ 6

У меня была аналогичная проблема. Мой класс имел переопределение ToString(), и он все еще не отображался в VS, что было странно.

Добавление атрибута [System.Diagnostics.DebuggerDisplay( "{ToString()}" )] в класс показало исключение в отладчике visual studio, где должна отображаться ToString. Оказалось, что у меня была ошибка с неправильным использованием string.Format() в моей реализации. Это интересное поведение - VS возвращается в значение ToString по умолчанию в случае исключения. Использование указанного атрибута заставляет дисплей отображать вывод метода - действительный или исключение. Это очень полезно для отладки ToString(). В противном случае нет смысла добавлять этот атрибут явным образом к каждому классу, поскольку классы по умолчанию включены, если только по каким-то причинам не требуется отключить это поведение.

Ответ 7

Если вы используете визуальную студию, вы можете добавить watch @runtime om thevariable.ToString() line, это будет отображаться в нижней части экрана при достижении точки останова