ToB企服应用市场:ToB评测及商务社交产业平台
标题:
C# 使用模式匹配的好处,由于好用所以推荐~
[打印本页]
作者:
张国伟
时间:
2024-7-18 15:26
标题:
C# 使用模式匹配的好处,由于好用所以推荐~
类型检查和转换:当你必要检查对象是否为特定类型,而且希望在同一时间内将其转换为那个类型时,模式匹配提供了一种更简便的方式来完成这一任务,制止了使用传统的as和is操作符后还必要进行额外的null检查。
复杂条件逻辑:在处置惩罚复杂的条件逻辑时,特殊是涉及到多个条件和类型的情况下,使用模式匹配可以使代码更加清楚易读。通过模式匹配,可以将复杂的if-else链或switch语句简化,使逻辑更直观。
解构复合类型:当你必要从复合类型(如元组、自定义类等)中提取值时,模式匹配答应你直接在条件检查中进行解构,这样可以制止编写额外的解构代码,使得代码更加简便。
范围检查:对于必要进行范围检查的场景,如检查一个数是否落在某个区间内,使用C# 9.0引入的关系模式可以极大简化代码,使得范围检查逻辑一目了然。
逻辑组合:在必要对多个条件进行逻辑组合的情况下,如必要检查一个值是否满足多个条件之一或全部条件,使用逻辑模式可以直接在模式匹配表达式中使用and、or和not运算符,制止了复杂的逻辑嵌套。
数据验证:模式匹配可以用于数据验证场景,特殊是当验证逻辑涉及到类型检查、值范围检查或特定属性值检查时。通过模式匹配,可以在单个表达式中完成全部这些检查,使得验证逻辑更加紧凑和易于维护。
多态行为:在处置惩罚必要根据对象类型执行不同操作的多态行为时,模式匹配提供了一种更灵活的方式来替代传统的虚方法或接口实现。这使得在不修改原有类条理布局的情况下,能够更容易地扩展或修改行为。
替代访问者模式:在实现访问者计划模式时,模式匹配可以作为一种更简便的替代方案,特殊是在处置惩罚复杂的对象布局时。通过模式匹配,可以直接在一个地方处置惩罚全部类型的情况,而不必要为每种类型创建单独的访问者方法。
模式匹配的这些用途展示了它在简化代码、提高可读性和灵活处置惩罚不同类型和条件的强大能力。随着C#语言的发展,模式匹配的功能和应用场景将会进一步扩展和深化。
下面我们看下一些经典且好用的模式匹配编码风格:
is断言 变量s已被安全地转换为string类型
object obj = "Hello, World!";
if (obj is string s) {
Console.WriteLine(s);
}
复制代码
is对可空类型的断言
public record Person(int Id, string? Name, bool? IsActived);
var person = new Person(1, "vipwan", null);
if (person?.IsActived is true)
{
Console.WriteLine($"Id {person.Id} 已激活");
}
复制代码
switch 答应使用多种模式,包括类型模式、常量模式和var模式 ,无需我们提前做转换以节省编码量
switch (obj) {
case 0:
Console.WriteLine("Zero");
break;
case var value:
Console.WriteLine($"Value: {value}");
break;
}
复制代码
C# 8.0引入了属性模式,答应基于对象的属性进行模式匹配
public record Person(string Name,int Age);
var person = new Person("John", 30);
//通俗易懂属性模式:如果person不为null,且name==john 并且age>=18的时候
if (person is { Name: "John", Age: >= 18 }) {
Console.WriteLine("John is an adult.");
}
复制代码
C# 9.0引入的逻辑模式,它答应使用逻辑运算符and、or和not来组合模式。
if (number is > 0 and < 10 or 100) {
Console.WriteLine("Number is between 0 and 10 or equals 100.");
}
复制代码
元组模式答应你对元组的元素进行模式匹配,这在处置惩罚元组返回值或多值情况时非常有用
var numbers = (1, "one", 18);
if (numbers is (1, string name, int age)) {
Console.WriteLine($"The name of 1 is {name}, age {age}!");
}
复制代码
列表模式答应对数组、列表等聚集进行模式匹配,可以匹配聚集的长度、元素等属性。这对于处置惩罚聚集数据时进行模式匹配提供了极大的便利。
int[] numbers = { 1, 2, 3 };
if (numbers is [1, 2, 3]) {
Console.WriteLine("The array contains the numbers 1, 2, and 3 in that order.");
}
复制代码
切片模式答应你匹配聚集的一部分,而不是整个聚集。这在你只关心聚集的某个特定部分时特殊有用。
int[] numbers = { 0, 1, 2, 3, 4 };
if (numbers is [0, .., 4]) {
Console.WriteLine("The array starts with 0 and ends with 4.");
}
复制代码
当然这里只是先容了部分好用的模式匹配,随着C#语言的逐代增强,可能会有更多的新特性和改进被引入。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4