Автоматическая замена числовых c констант эквивалентными значениями перечисления? - PullRequest
0 голосов
/ 03 апреля 2020

Некоторые из моих C# кодовых баз были первоначально преобразованы из другого языка. В ряде случаев оригинал был неаккуратным и использовал числовые константы c, где они должны были использовать перечисления (даже если перечисления действительно были определены). Этот оригинальный компилятор (VB6) был в порядке с этим.

В преобразованном коде C#, однако, компилятор не настолько разрешающий. Так что в качестве быстрого исправления мы просто вставили явные приведения. Это приводит к большому количеству кода (1000 строк), который выглядит следующим образом:

case (FooEnum)1:
case (FooEnum)123:
    DoSomething();
    break;

case (FooEnum)3:
    ...

Хотя эта функция работает правильно, она теряет многие преимущества читабельности перечислений. Некоторые случаи объединены вместе, как мой пример, другие - просто одноразовые значения enum в logi c.

Что я хочу, но было бы довольно кропотливым и склонным к ошибкам делать вручную, так это У меня есть что-то автоматически обновляющееся, чтобы оно выглядело так:

case FooEnum.Car:
case FooEnum.Aeroplane:
    DoSomething();
    break;

case FooEnum.Dog:
    ...

Я не могу придумать метод поиска и замены, который бы решал эту проблему в массовом порядке. (Поиск и замена будет работать для небольшого числа случаев, но кажется непрактичным для тысяч вариантов).

Существует ли какая-нибудь «хитрость инструмента», например рефакторинг в Visual Studio, которая может существовать для решения этой проблемы? Есть несколько вещей, которые близки (например, Switch enum auto-fill ), но не совсем соответствуют потребностям.

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

...