
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#所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)