考虑以下代码:

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


您能解释为什么未分配i32吗?我知道肯定没有分配i16,因为它在先前的范围内,但是在i32的情况下我没有得到。

最佳答案

从Mads Torgersen(Microsoft C#langauge PM)对here的评论中:


  如果切换失败,则不会明确分配由任何一个标签引入的变量,因此它们在主体中将无用。考虑以下代码:

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



因此,编译器无法确定分配了哪个变量,而必须假定两者均未分配。

关于c# - 切换模式匹配案例回退,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48405742/

10-10 23:09