Как заставить ToString () отображаться в Debug - PullRequest
14 голосов
/ 26 июля 2011

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

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

Ответы [ 7 ]

26 голосов
/ 26 июля 2011

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

[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.

7 голосов
/ 26 июля 2011

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

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

5 голосов
/ 26 июля 2011

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

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

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

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

4 голосов
/ 26 июля 2011

То, что вы ищете, это DebuggerDisplayAttribute:

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

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

2 голосов
/ 19 июля 2017

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

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

1 голос
/ 26 июля 2011

в объекте Переопределите .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 ()

0 голосов
/ 26 июля 2011

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

...