#c# #visual-studio #visual-studio-2015 #visual-studio-debugging
#c# #visual-studio #visual-studio-2015 #visual-studio-debugging
Вопрос:
Переопределение toString() класса — это обычно все, что вам нужно сделать, чтобы получить пользовательское форматирование в окне просмотра, но когда класс является производным от списка, это, похоже, не работает.
class ListOfInts : List<int>
{
public override string ToString()
{
return string.Join(",", this);
}
public static ListOfInts test = new ListOfInts() { 3, 4, 5 };
}
Проверяя «тест» в окне просмотра, я получаю
ListOfInts.test Count = 3 ListOfInts
и нужно вручную решить проблему следующим образом:
ListOfInts.test.ToString() "3,4,5" string
Это нормально для одного списка, но у меня есть большой массив вещей. Есть ли способ остановить приоритет формата «Count = 3» по умолчанию?
Комментарии:
1. Никогда не использовался, но попробуйте
DebuggerDisplay
-Attribute
Ответ №1:
Вы можете использовать DebuggerDisplayAttribute
:
[DebuggerDisplay("{ToString()}")]
public class ListOfInts : List<int>
{
public override string ToString()
{
return string.Join(",", this);
}
}
Комментарии:
1. Интересно знать, почему его окно быстрого просмотра не использовало переопределенное
ToString
. Я предполагаю, что это как-то связано с настройками его отладчика (например, «показывать необработанную структуру объектов в окнах переменных»).2. @TimSchmelter, в моей LINQPad он использует переопределенный
ToString()
без[DebuggerDisplay]
атрибута. Однако не проверял VS.3. Может быть, хотя этот конкретный параметр, похоже, не имеет значения. Хотя использование этого атрибута определенно работает -)
4. Обратите внимание, что, вероятно, будет хорошей идеей ограничить это до некоторой степени, как в случае, когда это список<T>, где T — класс, реализация toString() которого выполняется медленно, это может вызвать нежелательные задержки (или иным образом просто перестать работать по истечении времени ожидания дляпервый раз). Что-то вроде
return string.Join(",", this.Take(20)) this.Count > 20 ? "..." : "";
должно исправить