Я пишу код с простым оператором switch, основанным на значениях Enum. Мне пришло в голову, что в какой-то момент в будущем разработчик может добавить новое значение, поэтому я включил метод по умолчанию, чтобы зафиксировать это во время выполнения и выбросить исключение. Однако я понял, что я должен делать это каждый раз, когда я вставляю логику, и что я буду видеть такие проблемы во время выполнения, а не компилировать время.
Я задаюсь вопросом, есть ли какой-нибудь код, который я могу добавить, чтобы заставить компилятор сказать разработчику, что им необходимо обновить определенные методы в том случае, если они обновляют значения перечисления - помимо добавления комментариев к самому перечислению?
например. (пример ниже чисто теоретический, я выбрал статусы из жизненного цикла разработки, чтобы обеспечить ему что-то знакомое).
public enum DevelopmentStatusEnum
{
Development
//, QA //this may be added at some point in the future (or any other status could be)
, SIT
, UAT
, Production
}
public class Example
{
public void ExampleMethod(DevelopmentStatusEnum status)
{
switch (status)
{
case DevelopmentStatusEnum.Development: DoSomething(); break;
case DevelopmentStatusEnum.SIT: DoSomething(); break;
case DevelopmentStatusEnum.UAT: DoSomething(); break;
case DevelopmentStatusEnum.Production: DoSomething(); break;
default: throw new StupidProgrammerException(); //I'd like the compiler to ensure that this line never runs, even if a programmer edits the values available to the enum, alerting the program to add a new case statement for the new enum value
}
}
public void DoSomething() { }
}
public class StupidProgrammerException: InvalidOperationException { }
Это немного академический, но я вижу, что это полезно для того, чтобы сделать мое приложение надежным. Кто-нибудь пробовал это раньше/получил какие-либо хорошие идеи о том, как это может быть достигнуто?
Спасибо заранее,
JB