Всем привет
Позвольте поделиться с вами небольшим лайфхаком, который я успешно применяю около пары лет — создание последовательных числовых кодов для текстовых сообщений в исходном коде в процессе непосредственного редактирования исходного кода в Visual Studio:
Об этой задаче я стал задумываться, когда в коде стало «образовываться» несколько десятков сообщений пользователю/обработчиков ошибок/исключений и стало невозможно мириться с тем, что при получении очередного сообщения в runtime стало уже трудно ориентироваться откуда оно появилось. Возникло стойкое желание пронумеровать все сообщения последовательными индексами, которые бы выводились в начале каждого сообщения, но чтобы эту последовательность можно было создать во время набора исходного кода только с помощью клавиатуры, на «лету» (on demand), чтобы не отвлекаться от процесса кодирования.
Делается это следующим образом:
- Создать enum для кодов ошибок.
- Специальный синтаксис кодов в enum: "_число". (вначале числа идёт подчёркивание, т.к. enum требует всё-таки символьных имён).
- «Оцифровыватель» формата "_число" в собственно число.
- Магия инкрементирования числового кода «на лету».
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:
На самом деле эти действия выполняются достаточно быстро (замедленная съёмка):
Использование
«Обычно» числа с подчёркиванием достаточно редко используются в исходном коде, поэтому найти это число по Ctrl-F (поиск в текущем файле) или Ctrl-Shift-F (поиск во всём проекте) достаточно точно укажет на место ошибки.
(Конечно, можно открыть enum, найти код, нажать Shift-F12, но это из разряда правильный долгий путь...)
Недостатки
1. Если вы копируете куски кода со вставленными кодами ошибок, то, естественно, и коды ошибок будут уже не уникальными. Для борьбы с ними требуется периодически просматривать enum MCodes c проверкой, что какой-то код используется не больше одного раза
Очень помогают shortcat-ы F12 и Shift-F12.
2. Можно ошибиться в набираемом формате и написать не "_число", а что-то другое, не преобразуемое в число. Да, будет исключение.
Заключение
Нумерация сообщений, особенно об ошибках, иногда оказывает неоценимую услугу в отладке и поиске причин появления разных сообщений. Надеюсь, что этот способ поможет упростить эту задачу.
Кажется, что это минимум телодвижений?
P.S.
Это моё исключительно субъективное отношение к кодам ошибок, но вдруг и вам это чем-то поможет. Можно применять не только для инкрементации кодов ошибок, но и других последовательностей. Естественно, кастомизация решения на ваш вкус.
Причина использования формата числа в enum в виде "_число" в том, что за enum фактически скрывается int, а сам член enum нумеруется от начала последовательности (синтаксически его можно назначить, но автоматически через IntelliSense это не делается, а тратить на это времени совсем не хочется). А так же само значение этого члена зависит от местоположения. И если местоположение поменяется, то номер уже станет другим. Поэтому в коде везде игнорируется само значение.
Немного теории про Перечисления enum.