【问题标题】:Switch pattern matching case fallback切换模式匹配大小写回退
【发布时间】:2018-01-23 15:50:42
【问题描述】:

考虑以下代码:

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

你能解释一下为什么 i32 没有赋值吗?我知道 i16 肯定没有分配,因为它在以前的范围内,但在 i32 的情况下我不明白。

【问题讨论】:

  • 我想问题是编译器无法判断哪个变量(i16i32)是被分配的变量,因此必须假设两者都未分配。
  • @DavidG 是的,你是对的。我忘记了该值实际上可能是 Int16,因此分配了 i16,然后未分配 i32。谢谢。

标签: c# switch-statement pattern-matching


【解决方案1】:

来自 Mads Torgersen(Microsoft 的 C# 语言 PM)对 here 的评论:

如果你有 switch 失败,任何一个标签引入的变量都不会被明确分配,因此它们在正文中不会有用。考虑这段代码:

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

因此编译器无法判断分配了哪个变量,并且必须假设两者都没有。

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 2019-07-10
    • 1970-01-01
    • 2020-04-24
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    相关资源
    最近更新 更多