Мое предложение найти существующие ошибки, такие как описанная, состоит в том, чтобы использовать Visual Studio для выполнения поиска по всему решению (Ctrl + Shift + F) с использованием регулярных выражений.
- Нажмите Ctrl + Shift + F
- Выберите «Использовать: регулярные выражения» в разделе «Параметры поиска»
- Введите следующее регулярное выражение в поле «Найти что»: [^ 0-9a-zA-Z _] [0-9] + [^ 0-9]
Я думаю, что это будет перечислять все вхождения буквального числа в исходном коде. Затем вы можете просмотреть результаты поиска, чтобы узнать, требуется ли какое-либо из них для дальнейшего изучения.
Вы можете дополнительно сузить результаты поиска, сосредоточившись на конкретном типе проблемы. Например, чтобы найти код в представленном примере, вы можете настроить следующее выражение: == (| \ t | \ r | \ n) * [0-9] + [^ 0-9]
Оригинальный ответ
Я не могу предложить ни одного хорошего предложения, чтобы избежать этой проблемы, кроме как попытаться избежать "магических" значений в коде.
Предполагая, что этот код используется в некоторой логике выбора меню, я чувствую, что, возможно, код должен выглядеть примерно так:
static class MenuSelection
{
public const char Open = '1';
public const char Edit = '2';
public const char Save = '3';
// ...
public const char Close = '7';
}
И тогда MenuSelection следует использовать в операторе if, как показано ниже:
char theChar = whatever();
if(theChar == MenuSelection.Close) {...}
Это на самом деле не решает проблему неявного преобразования из UInt32 в char, но, надеюсь, человек, пишущий код для констант в классе MenuSelection, с меньшей вероятностью забудет кавычки.
РЕДАКТИРОВАТЬ: О, после того, как он попробовал, кажется, что это как-то решает проблему неявного преобразования, потому что public const char Close = 7;
вызывает ошибку компиляции.
К сожалению, это не поможет вашей насущной проблеме: много существующего кода, содержащего такие ошибки.