gpt4 book ai didi

c# - 编译器在打开枚举后提示未分配的变量

转载 作者:行者123 更新时间:2023-11-30 14:55:20 24 4
gpt4 key购买 nike

我有以下枚举器:

enum Foo { Bar, Baz };

在以下代码中,编译器因错误而中止:

use of unassigned local variable 'str'

The code:

string str;
Foo foo = Foo.Bar;

switch (foo)
{
case Foo.Bar: str = "a"; break;
case Foo.Baz: str = "b"; break;
}

str.ToLower();

开关 涵盖了枚举器的所有可能值。但是编译器仍然认为 str 可能未分配。这是为什么?当然,我可以在其中放置一个 default 案例,但那是错误的,因为在编译时不会捕获错误。例如,如果 Foo 枚举稍后被修改并添加了一个新值,然后最好得到一个编译器错误。如果我使用 default 情况,则在重新编译时不会捕获错误。

我想没有办法让编译器接受没有 default case 的 switch and 如果 引发错误Foo 稍后扩展?

最佳答案

I suppose there is no way to get the compiler to accept a switch without a default case and raise an error if Foo is extended later on?

这是正确的。长话短说,编译器这样做的原因是可以分配 foo不是有效值之一的值 enum Foo通过类型转换 int 来获取 s 值, 可以绕过 switch 的所有情况.

我在这种情况下使用的解决方案是添加一个断言:

switch (foo)
{
case Foo.Bar: str = "a"; break;
case Foo.Baz: str = "b"; break;
default: Debug.Assert(false, "An enum value is not covered by switch: "+foo);
}

关于c# - 编译器在打开枚举后提示未分配的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582771/

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