切换模式匹配案例回退

时间:2018-01-23 15:50:43

标签: c# switch-statement pattern-matching

请考虑以下代码:

void Foo(object value)
{
    switch (value)
    {
        case Int16 i16:
        case Int32 i32:
            // Do something with i32
            break;
    }
}

你能解释为什么i32未分配?我知道i16肯定没有分配,因为它在之前的范围内,但我不知道在i32的情况下。

1 个答案:

答案 0 :(得分:0)

来自Mads Torgersen对here的评论(微软的C#langauge PM):

  

如果你有切换,那么任何一个标签引入的变量都不会被明确分配,因此它们在身体中不会有用。请考虑以下代码:

case string s:
case null:
    WriteLine(s); // Can't! s may not have been assigned.

因此,编译器无法分辨哪个变量已分配,并且必须假设两者都不是。