如何为单个switch语句设置ReSharper检查级别为错误?
针对特定Switch语句设置ReSharper枚举缺项检查为编译错误的方案
需求背景
我定义了一个枚举:
enum MyEnum { First, Second, Third }
然后写了这样的switch语句:
void Foo(MyEnum value) { // Looking for something like // Resharper once severity:error SwitchStatementMissingSomeCases switch (value) { case MyEnum.First: // do something break; case MyEnum.Second: // do something else break; // <<<< Missing MyEnum.Third default: throw new ArgumentOutOfRangeException(); } }
我希望这段代码能触发编译错误,但不想全局修改ReSharper的检查级别——我有大概50个针对其他枚举的switch语句,缺不缺case根本不重要,只有少数几个需要强制检查缺项并报错。虽然可以把全局级别设为错误再手动禁用50次,但这种方式太不优雅了。
另外我知道可以用字典映射的方式实现类似的强制覆盖效果:
void Bar() { // do something } void Baz() { // do something else } Dictionary<MyEnum, Action> Handlers = new Dictionary<MyEnum, Action> { [MyEnum.First] = Bar, [MyEnum.Second] = Baz }; void Foo(MyEnum value) { if (! Handlers.TryGetValue(value, out Action action)) throw new ArgumentOutOfRangeException(); action(); }
但我还是希望能通过ReSharper的检查在编译阶段就发现问题。
现状说明
很遗憾,截至2018年5月22日,并没有直接实现“针对单个代码块临时修改ReSharper检查级别”的可行方案。目前ReSharper的检查级别配置要么是全局生效,要么是针对整个文件、命名空间或类来调整,没办法精准到某一个switch语句单独设置。
如果一定要追求类似的编译阶段检查效果,除了你已经提到的字典映射方案,还可以考虑借助代码分析工具的自定义规则(比如Roslyn分析器)来实现:编写一个自定义分析规则,标记出你需要强制检查的枚举对应的switch语句,一旦缺项就触发编译错误。不过这种方案需要额外的开发和配置成本。
内容的提问来源于stack exchange,提问作者Владимир Тырин
相关产品推荐
相关产品推荐

