C # Asegúrese de que los valores de enumeración sean válidos - Método a prueba de futuro
Estoy escribiendo algún código con una simple instrucción de cambio basada en valores Enum. Se me ocurrió que en algún momento en el futuro un desarrollador puede agregar un nuevo valor, por lo que incluí un método predeterminado para capturar esto en tiempo de ejecución y lanzar una excepción. Sin embargo, me di cuenta de que debía hacer esto cada vez que instalaba la lógica de esta manera, y que solo veía esos problemas en tiempo de ejecución en lugar de compilar.
Me pregunto si hay algún código que pueda agregar para que el compilador le diga al desarrollador que necesitan actualizar ciertos métodos en caso de que actualicen los valores de la enumeración, ¿más allá de simplemente agregar comentarios a la enumeración en sí?
p.ej. (el siguiente ejemplo es puramente teórico; elegí los estados del ciclo de vida del desarrollo para asegurar que sea algo familiar para la mayoría).
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 { }
Esto es un poco académico, pero puedo verlo como útil para hacer que mi aplicación sea robusta. ¿Alguien ha intentado esto antes / tiene alguna buena idea sobre cómo podría lograrse esto?
Gracias por adelantado,
JB