Дебаг со всеми удобствами

Недавно открыл для себя атрибут, который значительно облегчил мне жизнь в некоторых случаях.

Его зовут 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; }
}

Если мы насоздаем кучу объектов этого типа, то в дебаггере нам будет не очень удобно отличать один от другого, придется раскрывать список –

image

Но здесь нам может помочь чудо-атрибут DebuggerDisplay. Применим его следующим образом:

[DebuggerDisplay("{System.Text.Encoding.ASCII.GetString(Value)}", Name = "{Name}")]
public class Parameter
{
...
}
<pre>
  • Первый параметр, value, указывает, что нужно выводить в столбце “Value” окна Watch или всплывающего окна дебаггера. Причем, можно использовать всякое форматирование, для этого нужно заключить выражение в фигурные скобки. В примере выше я хочу видеть значение byte[], перекодированного с помощью ASCII.
  • Второй параметр, name, указывает значение, которое нужно выводить в столбце “Name”. Форматирование всё так же можно использовать.

Таким образом, мы получаем:

image

Видно, что в столбце Name всплывающей подсказки дебаггера выводится свойство Name нашего класса – как и было указано. Это не очень существенный плюс, поскольку мы и так могли это свойство узнать, раскры список. А вот свойство Value уже интереснее, поскольку, я думаю, мало кто умеет в уме байты переводить в ASCII кодировку, а здесь всё представлено в очень удобном виде.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *