请考虑以下代码:
void Foo(object value)
{
switch (value)
{
case Int16 i16:
case Int32 i32:
// Do something with i32
break;
}
}
你能解释为什么i32未分配?我知道i16肯定没有分配,因为它在之前的范围内,但我不知道在i32的情况下。
答案 0 :(得分:0)
来自Mads Torgersen对here的评论(微软的C#langauge PM):
如果你有切换,那么任何一个标签引入的变量都不会被明确分配,因此它们在身体中不会有用。请考虑以下代码:
case string s: case null: WriteLine(s); // Can't! s may not have been assigned.
因此,编译器无法分辨哪个变量已分配,并且必须假设两者都不是。