我有以下枚举:编译抱怨未赋值的变量开关后枚举
use of unassigned local variable 'str'
的代码:
enum Foo { Bar, Baz };
在下面的代码,编译器与错误中止
string str;
Foo foo = Foo.Bar;
switch (foo)
{
case Foo.Bar: str = "a"; break;
case Foo.Baz: str = "b"; break;
}
str.ToLower();
switch
涵盖了所有可能的枚举值。但编译器仍然认为str
可能未被分配。这是为什么?当然,我可以在那里放一个default
的情况,但那是错误的,因为错误在编译时没有被捕获。例如,如果Foo
枚举稍后被修改并添加了新的值,那么然后这将很好地得到编译器错误。如果我使用default
大小写,那么重新编译时不会捕获错误。
我想有没有办法让编译器接受switch
没有default
情况和如果Foo
扩展以后产生一个错误?
断言在这种情况下看起来是最好的主意。 – 2014-08-30 13:46:25
您可以使用'Debug.Fail(...)'而不是'Debug.Assert(false,...)'。最后一个开关部分如何继续?你会为'str'和'break'分配一个虚拟值(如'null')吗?或者你会抛出?你不能“跌倒”;交换机部分的端点必须无法访问。 – 2015-06-09 22:04:12