C# 7.0 中的模式匹配

Pattern Matching in C# 7.0

我在 Microsoft 的博客 'New Features in C# 7.0' 中找到了这个关于 Switch-Case 模式匹配的代码片段:

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}

现在我的问题是:

如何将它与 switch-case 或其他结构一起使用?什么是 shape?它应该是 Shape 的实例(Circle、Rectangle 等的超级class)吗?

我的第二个问题是:如何使用 when?是新关键字吗?编译器以何种方式验证它?

谢谢。

Here 模式匹配 的当前文档。

是的,ShapeCircleRectangle 的超 class。

when 关键字用于向 case 块添加额外的条件。它与异常过滤器(在 C# 6 中引入)的使用方式几乎相同。