当switch语句有未处理的情况时,有没有办法让c#编译器显示警告?

Bra*_*ann 9 .net compiler-construction warnings switch-statement

请考虑以下代码:

        private enum myEnum
        {
            A,
            B
        }
        private void myMethod(myEnum m)
        {
            switch (m)
            {
                case myEnum.A:
                    //do stuff
                break;
                case myEnum.B:
                   //do stuff
                break;
                default:
                   throw new NotImplementedException(m.ToString());
            }
        }
Run Code Online (Sandbox Code Playgroud)

如果我将第三个成员C添加到myEnum,我只会在运行时被NotImplementedException警告

我想做的是让编译器在有未处理的情况并且没有默认情况的情况下警告我:case.

有没有办法做到这一点,或者解决这个问题的其他方法,最终目标是在编译时警告某些东西丢失了?

Bin*_*ier 6

不幸的是,这里没有编译器功能为您执行此操作.

没有枚举,而是拥有基类或接口.MyMethod在界面上定义.

每个枚举成员现在变成一个具有myMethod不同行为的类.如果你添加一个类(为了扩展选项,目前你要添加一个枚举项)但是没有实现myMethod,你将会遇到编译器错误.

在代码中有很多地方你在select语句中提供不同的行为是你可能需要使用多态的气味.

编辑

我能给出的最好的建议是为每个依赖switch语句的函数构建单元测试,并为枚举中的每个值调用它(你可以在运行时使用Enum类上的GetValues成员获取值)