Недавно открыл для себя атрибут, который значительно облегчил мне жизнь в некоторых случаях.
Его зовут DebuggerDisplay. Его назначение я покажу на примере.
Допустим, у нас есть класс Parameter, который имеет следующий вид:
public class Parameter { internal Parameter(string name, byte[] value) { Name = name; Value = value; } public string Name { get; private set; } public byte[] Value { get; private set; } }
Если мы насоздаем кучу объектов этого типа, то в дебаггере нам будет не очень удобно отличать один от другого, придется раскрывать список –
Но здесь нам может помочь чудо-атрибут DebuggerDisplay. Применим его следующим образом:
[DebuggerDisplay("{System.Text.Encoding.ASCII.GetString(Value)}", Name = "{Name}")] public class Parameter { ... } <pre>
- Первый параметр, value, указывает, что нужно выводить в столбце “Value” окна Watch или всплывающего окна дебаггера. Причем, можно использовать всякое форматирование, для этого нужно заключить выражение в фигурные скобки. В примере выше я хочу видеть значение byte[], перекодированного с помощью ASCII.
- Второй параметр, name, указывает значение, которое нужно выводить в столбце “Name”. Форматирование всё так же можно использовать.
Таким образом, мы получаем:
Видно, что в столбце Name всплывающей подсказки дебаггера выводится свойство Name нашего класса – как и было указано. Это не очень существенный плюс, поскольку мы и так могли это свойство узнать, раскры список. А вот свойство Value уже интереснее, поскольку, я думаю, мало кто умеет в уме байты переводить в ASCII кодировку, а здесь всё представлено в очень удобном виде.