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 是 模式匹配 的当前文档。
是的,Shape
是 Circle
和 Rectangle
的超 class。
when
关键字用于向 case
块添加额外的条件。它与异常过滤器(在 C# 6 中引入)的使用方式几乎相同。
我在 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 是 模式匹配 的当前文档。
是的,Shape
是 Circle
和 Rectangle
的超 class。
when
关键字用于向 case
块添加额外的条件。它与异常过滤器(在 C# 6 中引入)的使用方式几乎相同。