是否有警告(错误),类似于C#C4061 for C#

是否有警告(错误),类似于C#C4061 for C#,第1张

概述通常,如果我在C#中使用switch for enums,我必须编写类似的东西: switch (e){ case E.Value1: //... break; case E.Value2: //... break; //... default: throw new Not 通常,如果我在C#中使用switch for enums,我必须编写类似的东西:
switch (e){    case E.Value1:        //...        break;    case E.Value2:        //...        break;        //...    default:        throw new NotImplementedException("...");}@H_403_3@  

在C(对于VS)中,我可以为此开关启用警告C4061和C4062,使它们出错并进行编译时检查.在C#中,我必须将此检查移至运行时…

有谁知道在C#中如何在编译时检查这个?也许有一个警告,默认情况下禁用,我错过了,或者其他方式?

解决方法 不,没有编译时检查 – 有一个只处理一些命名值的开关/案例是合法的.它本来可以包括它,但是有一些问题.

首先,对于枚举值不具有任何“命名”值完全有效(不幸的是):

enum Foo{    bar = 0,Baz = 1}...Foo nastyValue = (Foo) 50;@H_403_3@  

鉴于在switch / case中任何值都是可行的,编译器无法知道你并不想尝试处理未命名的值.

其次,它不适用于Flags枚举 – 编译器并不真正知道哪些值是方便的组合.它可以推断,但它会有点icky.

第三,它并不总是你想要的 – 有时你真的只想回应一些案例.我不想在合理的定期基础上压制警告.

你可以使用Enum.IsDefined预先检查这个,但效率相对较低.

我同意所有这一切都有点痛苦 – 当谈到.NET时,枚举是一个令人讨厌的领域:(

总结

以上是内存溢出为你收集整理的是否有警告(错误),类似于C#C4061 for C#全部内容,希望文章能够帮你解决是否有警告(错误),类似于C#C4061 for C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1238995.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存