C # Garantir Valores Enum Válidos - Método à Prova de Futuro
Eu estou escrevendo algum código com uma simples declaração switch baseada em valores Enum. Ocorreu-me que em algum momento no futuro um desenvolvedor pode adicionar um novo valor, então incluí um método padrão para capturar isso em tempo de execução e lançar uma exceção. No entanto, percebi que deveria fazer isso toda vez que colocasse lógica desse jeito, e que só veria esses problemas em tempo de execução, em vez de compilar o tempo.
Eu estou me perguntando se há algum código que eu possa adicionar para obter o compilador para dizer ao desenvolvedor que eles precisam atualizar certos métodos no caso em que eles atualizem valores enum - além de apenas adicionar comentários ao próprio enum?
por exemplo. (o exemplo abaixo é puramente teórico; escolhi status do ciclo de vida de desenvolvimento para garantir que seja algo familiar para a maioria).
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 { }
Isso é um pouco acadêmico, mas posso ver isso como sendo útil para tornar meu aplicativo robusto. Alguém já tentou isso antes / tem alguma boa idéia de como isso pode ser alcançado?
Desde já, obrigado,
JB