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

前端之家收集整理的这篇文章主要介绍了是否有警告(错误),类似于C#C4061 for C#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通常,如果我在C#中使用switch for enums,我必须编写类似的东西:
switch (e)
{
    case E.Value1:
        //...
        break;

    case E.Value2:
        //...
        break;

        //...
    default:
        throw new NotImplementedException("...");
}

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

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

解决方法

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

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

enum Foo
{
    Bar = 0,Baz = 1
}
...
Foo nastyValue = (Foo) 50;

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

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

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

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

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

原文链接:https://www.f2er.com/c/118127.html

猜你在找的C&C++相关文章