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

от автора

Всем привет

Позвольте поделиться с вами небольшим лайфхаком, который я успешно применяю около пары лет — создание последовательных числовых кодов для текстовых сообщений в исходном коде в процессе непосредственного редактирования исходного кода в 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.


ссылка на оригинал статьи https://habr.com/ru/post/461125/


Комментарии

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

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