Saturday, March 15, 2008

Visual studio :: Отображение массивов в Watch

Давно меня бесило то, что массивы в watch отображаются весьма бестолково. И никак не получалось найти способа повлиять на это. Собственно я и сейчас не представляю как спросить у гугла то, что мне надо не зная названия класса-атрибута, который отвечает за отображение в watch.
Решение нашлось случайно, когда я смотрел "исходники" Dictionary. Заметил там аттрибут DebugDisplay.
Теперь, чтобы отображать в watch то, что мне надо - пишу подходящий wrapper. Например, чтобы в двумерном массиве посмотреть третью строку, пишу обертку для одномерного массива:

        [DebuggerDisplay("{_array[2]}")]
class DebugArray
{
double [] _array;
public DebugArray(int len)
{
_array = new double[len];
}
public double this[int i]
{
get { return _array[i]; }
set { _array[i] = value; }
}
}
, т.е. для массива будет отображаться значение третьего элемента, а не кол-во элементов. И использую массив таких врапперов для получения двумерного массива:
            List<DebugArray> v = new List<DebugArray>();
v.Add(new DebugArray(dimension));
v[0][3] = 0.123;
Собственно все весьма просто. Достаточно только знать о существовании аттрибута DebugDisplay :)

No comments: