Задача о создании последовательных числовых кодов для нумерации сообщений в исходном коде в Visual Studio (ex. C#) -6


Всем привет


Позвольте поделиться с вами небольшим лайфхаком, который я успешно применяю около пары лет — создание последовательных числовых кодов для текстовых сообщений в исходном коде в процессе непосредственного редактирования исходного кода в Visual Studio:

image

Об этой задаче я стал задумываться, когда в коде стало «образовываться» несколько десятков сообщений пользователю/обработчиков ошибок/исключений и стало невозможно мириться с тем, что при получении очередного сообщения в runtime стало уже трудно ориентироваться откуда оно появилось. Возникло стойкое желание пронумеровать все сообщения последовательными индексами, которые бы выводились в начале каждого сообщения, но чтобы эту последовательность можно было создать во время набора исходного кода только с помощью клавиатуры, на «лету» (on demand), чтобы не отвлекаться от процесса кодирования.

image

Делается это следующим образом:

  1. Создать enum для кодов ошибок.
  2. Специальный синтаксис кодов в enum: "_число". (вначале числа идёт подчёркивание, т.к. enum требует всё-таки символьных имён).
  3. «Оцифровыватель» формата "_число" в собственно число.
  4. Магия инкрементирования числового кода «на лету».

1,2:


/// "База данных" по кодам ошибок
public enum MCodes{
        _000,
        _001,
        _002,
}

3: «Оцифровыватель» формата "_число" в собственно число


static class _MCodeExtensions{
        /// mini formar error message - краткий формат представления ошибки.
        public static string mfem(this MCodes mcode) {
            //string str = $"{nameof(rcode)} = {rcode}, {nameof(mcode)} = {mcode}";
            int val = Int32.Parse(mcode.ToString().Substring(1));
            string str = $"{nameof(mcode)} = {val}";
            return str;
        }
}

4. Магия


Магия состоит в использовании возможностей IntelliSense для Visual Studio:

image


На самом деле эти действия выполняются достаточно быстро (замедленная съёмка):

image


Использование


«Обычно» числа с подчёркиванием достаточно редко используются в исходном коде, поэтому найти это число по Ctrl-F (поиск в текущем файле) или Ctrl-Shift-F (поиск во всём проекте) достаточно точно укажет на место ошибки.

(Конечно, можно открыть enum, найти код, нажать Shift-F12, но это из разряда правильный долгий путь...)

Недостатки


1. Если вы копируете куски кода со вставленными кодами ошибок, то, естественно, и коды ошибок будут уже не уникальными. Для борьбы с ними требуется периодически просматривать enum MCodes c проверкой, что какой-то код используется не больше одного раза
image


Очень помогают shortcat-ы F12 и Shift-F12.

2. Можно ошибиться в набираемом формате и написать не "_число", а что-то другое, не преобразуемое в число. Да, будет исключение.

Заключение


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

Кажется, что это минимум телодвижений?

P.S.


Это моё исключительно субъективное отношение к кодам ошибок, но вдруг и вам это чем-то поможет. Можно применять не только для инкрементации кодов ошибок, но и других последовательностей. Естественно, кастомизация решения на ваш вкус.

Причина использования формата числа в enum в виде "_число" в том, что за enum фактически скрывается int, а сам член enum нумеруется от начала последовательности (синтаксически его можно назначить, но автоматически через IntelliSense это не делается, а тратить на это времени совсем не хочется). А так же само значение этого члена зависит от местоположения. И если местоположение поменяется, то номер уже станет другим. Поэтому в коде везде игнорируется само значение.

Немного теории про Перечисления enum.




К сожалению, не доступен сервер mySQL