我有以下枚舉:編譯抱怨未賦值的變量開關後枚舉
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