Я хотел бы, чтобы ToString() отображался для класса, находящегося под моим контролем, в режиме отладки.
Было бы неплохо, если бы это первое, что появлялось при наведении мыши на переменную. Есть ли атрибут для этого?
Я хотел бы, чтобы ToString() отображался для класса, находящегося под моим контролем, в режиме отладки.
Было бы неплохо, если бы это первое, что появлялось при наведении мыши на переменную. Есть ли атрибут для этого?
Отметьте свой класс с помощью
[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
.
Существует DebuggerDisplayAttribute
, который позволяет вам влиять на отображение. Он позволяет писать довольно сложные выражения для получения отладочного вывода, хотя не рекомендуется сделать это.
Однако, если вы переопределили ToString
, отладчик задокументирован, чтобы отображать это по умолчанию. Может быть, что-то не так с кодом?
this
доступен для использования в выражении (имеет доступ), и вам не нужно его вводить (неявно). В основном именно то, что происходит с this
, например. внутри метода класса.
- person Jon; 26.07.2011
ToString()
выдает исключение, отладчик VS не будет отображать значение. DebuggerDisplayAttribute
принудительно отобразит сообщение об исключении. Но обычно вам не нужно этого делать.
- person swdev; 03.10.2015
Вывод ToString
должен быть значением по умолчанию, которое вы видите при отладке.
Его можно переопределить с помощью атрибута DebuggerDisplay
(см. MSDN).
Я предпочитаю переопределять метод ToString
, потому что он проще и универсальнее, потому что он также помогает при записи в файлы журнала.
Какой выход вы видите? Если вы получите имя типа, вы увидите значение по умолчанию ToString
.
То, что вы ищете, это DebuggerDisplayAttribute
:
http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute
Используйте приведенную выше ссылку, чтобы увидеть, как это делается, а затем примените это к своему классу, используя метод ToString()
для управления тем, что показано. Я когда-либо использовал только свойства, не уверен, что вы можете вводить классы.
У меня была аналогичная проблема. В моем классе было переопределение ToString(), и оно все еще не отображалось в VS, что было странно.
Добавление атрибута [System.Diagnostics.DebuggerDisplay("{ToString()}")] в класс показало исключение в отладчике Visual Studio, где должен был отображаться ToString. Оказалось, у меня была ошибка с неправильным использованием string.Format() в моей реализации. Это интересное поведение — VS возвращается к ToString по умолчанию в случае исключения. Использование упомянутого атрибута заставляет дисплей отображать выходные данные метода - действительные или исключительные. Это очень полезно для отладки ToString(). В противном случае нет смысла явно добавлять этот атрибут к каждому классу, поскольку классы включают его по умолчанию, если только кто-то не хочет отключить это поведение по какой-либо причине.
в объекте Переопределите .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().
Если вы используете визуальную студию, вы можете добавить watch @ runtime в строку yourvariable.ToString(), это будет отображаться в нижней части экрана при достижении точки останова.