You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为单个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,提问作者Владимир Тырин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:25:36