我有以下枚举器:
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/