【发布时间】:2019-11-25 12:03:51
【问题描述】:
最近我打算潜入 C# 并来自 Java 背景。
当我来switch-case主题复习时,我看到了以下术语。
因为 C# 6 只支持常量模式并且不允许 常量值的重复,案例标签定义互斥 值,并且只有一种模式可以匹配匹配表达式。作为一个 因此,case 语句出现的顺序并不重要。
然而,在 C# 7.0 中,由于支持其他模式,case 标签不需要定义互斥值,并且多个 模式可以匹配匹配表达式。因为只有语句 在包含匹配模式的第一个开关部分是 执行时,case 语句出现的顺序现在很重要。 如果 C# 检测到一个或多个 case 语句为 等价于或是先前语句的子集,它会生成一个 编译器错误,CS8120,“开关情况已由 前一个案例。” - Source
在这方面互斥值是什么意思?您能否举例说明相互排斥和非相互排斥的价值观?
【问题讨论】:
-
你读过这个吗? docs.microsoft.com/en-us/dotnet/csharp/language-reference/…它可能会回答你的问题。
-
@blackforest-tom 我忘了添加它的来源。谢谢。
-
如果您向下滚动到“case 语句和 when 子句”,就有很好的例子。基本上常量值将是互斥的,如果它们不同的话。它们永远不会是非互斥的。如果你选择 when 子句,你可以有非互斥的值(通过继承或条件!)
-
想想docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 以及一个项目如何匹配多个模式