我正在使用基于枚举值的简单 switch 语句编写一些代码。我突然想到,在未来的某个时候,开发人员可能会添加一个新值,所以我包含了一个默认方法来在运行时捕获它并抛出异常。但是我意识到每次我输入这样的逻辑时我都应该这样做,而且我只会在运行时而不是编译时看到这样的问题。
我想知道是否可以添加一些代码来让编译器告诉开发人员在更新枚举值的情况下他们需要更新某些方法——而不仅仅是向枚举本身添加注释?
例如(下面的示例纯粹是理论上的;我从开发生命周期中选择了状态,以确保它是大多数人熟悉的东西)。
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