gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:21:12 26 4
gpt4 key购买 nike

通常,如果我在 C# 中对枚举使用 switch,我必须这样写:

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 枚举一起使用 - 编译器并不真正知道哪些值是方便的组合。它可以推断出这一点,但这会有点恶心。

第三,这并不总是您想要的 - 有时您真的只想回应少数几个案例。我不想在合理的基础上抑制警告。

您可以使用 Enum.IsDefined预先检查这一点,但效率相对较低。

我同意所有这一切都有些痛苦 - 对于 .NET 而言,枚举有点令人讨厌 :(

关于c# - 是否有警告(错误),类似于 C# 的 C4061,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12531132/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com