您的问题似乎不完整,您是想询问关于C语言编程的某个具体问题吗?比如C语言的语法、编程技巧、项目开发等。请提供更具体的信息,这样我才能给出更准确的回答。

摘要:前言 自从 2017 年 C# 7.0 版本开始引入声明模式和常数模式匹配开始,到 2022 年的 C# 11 为止,最后一个板块列表模式和切片模式匹配也已经补齐,当初计划的模式匹配内容已经基本全部完成。 C# 在模式匹配方面下一步计划则是
前言 自从 2017 年 C# 7.0 版本开始引入声明模式和常数模式匹配开始,到 2022 年的 C# 11 为止,最后一个板块列表模式和切片模式匹配也已经补齐,当初计划的模式匹配内容已经基本全部完成。 C# 在模式匹配方面下一步计划则是支持活动模式(active pattern),这一部分将在本文最后进行介绍,而在介绍未来的模式匹配计划之前,本文主题是对截止 C# 11 模式匹配的(不)完全指南,希望能对各位开发者们提升代码编写效率、可读性和质量有所帮助。 模式匹配 要使用模式匹配,首先要了解什么是模式。在使用正则表达式匹配字符串时,正则表达式自己就是一个模式,而对字符串使用这段正则表达式进行匹配的过程就是模式匹配。而在代码中也是同样的,我们对对象采用某种模式进行匹配的过程就是模式匹配。 C# 11 支持的模式有很多,包含: 声明模式(declaration pattern) 类型模式(type pattern) 常数模式(constant pattern) 关系模式(relational pattern) 逻辑模式(logical pattern) 属性模式(property pattern) 位置模式(positional pattern) var 模式(var pattern) 丢弃模式(discard pattern) 列表模式(list pattern) 切片模式(slice pattern) 而其中,不少模式都支持递归,也就意味着可以模式嵌套模式,以此来实现更加强大的匹配功能。 如果你不清楚这些模式的话,可以访问 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/patterns 进行了解。 模式匹配可以通过 switch 表达式来使用,也可以在普通的 switch 语句中作为 case 使用,还可以在 if 条件中通过 is 来使用。本文主要在 switch 表达式中使用模式匹配。 那么接下来就对这些模式进行介绍。 实例:表达式计算器 为了更直观地介绍模式匹配,我们接下来利用模式匹配来编写一个表达式计算器。 为了编写表达式计算器,首先我们需要对表达式进行抽象: public abstract partial class Expr<T> where T : IBinaryNumber<T> { public abstract T Eval(params (string Name, T Value)[] args); } 我们用上面这个 Expr<T> 来表示一个表达式,其中 T 是操作数的类型,然后进一步将表达式分为常数表达式 ConstantExpr、参数表达式 ParameterExpr、一元表达式 UnaryExpr、二元表达式 BinaryExpr 和三元表达式 TernaryExpr。最后提供一个 Eval 方法,用来计算表达式的值,该方法可以传入一个 args 来提供表达式计算所需要的参数。
阅读全文