微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以强制非详尽的 c# switch 表达式导致编译错误吗?

如何解决我可以强制非详尽的 c# switch 表达式导致编译错误吗?

我喜欢用于将枚举映射到值的 switch 表达式 - 虽然不是最具扩展性的解决方案,但如果枚举代表某种模式(并且不是很大),它会快速且相当干净。

错误一个常见来源是向枚举添加成员 - 这通常会导致未处理的新案例。

但我认为,如果我们可以为非穷举开关编译错误,那么这些错误几乎可以消除,从而使遗漏很容易可见和修复。 (认情况必须被省略,否则一切都没有实际意义)

这可能吗?我在想这样的事情:

public string GetTargetValue()
{
    return target switch
   {
       Target.A => "foo",Target.B => "bar",// Compile error if someone added Target.C,otherwise works fine
       // no default case - it would defeat the point
   };
}

P.S:我主要在 Unity 中工作,但据我所知,较新版本的 Unity 使用 Roslyn 编译器(我不使用 Burst),所以我认为这无关紧要。

解决方法

是的,你可以。

这种情况会引发警告 CS8509,因为您可以see here。要将其转化为错误,请将以下内容添加到您的 .editorconfig 中:

dotnet_diagnostic.CS8509.severity = error

您可能还想忽略 CS8524,如果您没有默认情况就会发生这种情况,并且没有引发 CS8509(因此即使您涵盖了所有可能的值),see here。在这种情况下,编译器将插入带有 throw new SwitchExpressionException(target):

的默认情况
dotnet_diagnostic.CS8524.severity = none

我怀疑您可能需要使用 .NET 5 SDK 进行构建才能生成此警告。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。