当前位置: 首页 > news >正文

2013年建设工程发布网站宁波外贸订单外发加工

2013年建设工程发布网站,宁波外贸订单外发加工,安徽省建设厅网站证书查询,视频做网站背景一、模式匹配核心概念 1.什么是模式匹配? 模式匹配是一种检查数据结构是否满足特定条件并提取信息的机制,取代传统的 if-else 或 switch 逻辑,使代码更简洁、安全。 2.核心优势 简洁性:减少类型检查和转换的冗余代码安全性&…

一、模式匹配核心概念

1.什么是模式匹配?

        模式匹配是一种检查数据结构是否满足特定条件并提取信息的机制,取代传统的 if-else 或 switch 逻辑,使代码更简洁、安全。

2.核心优势

  • 简洁性:减少类型检查和转换的冗余代码
  • 安全性:编译时检查模式的有效性(如属性是否存在)
  • 表达力:支持嵌套、递归和逻辑组合模式

二、核心模式类型与语法

1.类型模式(Type Pattern)

  • 用途:检查对象是否为指定类型,并提取变量
  • 语法:变量  is  类型  标识符
object obj = "HaHaHa"
if (obj is string s)
{Console.WriteLine("s.length"); //直接使用s,无需显式转换
}//注意:匹配失败时s不会被赋值

2.常量模式(Constant Pattern)

  • 用途:匹配常量值(如整数、字符串、null)
  • 语法:变量  is  [常量值]
int number = 1;
if (number is 1)
{Console.WriteLine("值为1");
}string str = null;
if(text is null)
{Console.WriteLine("空值");
}

3.变量模式(Var Pattern)

  • 用途:将值捕获到临时变量,通常结合 when 使用
object obj = 3.14;
if (obj is var temp && temp is double) 
{Console.WriteLine($"Double value: {temp}");
}

4.属性模式(Property Pattern)

  • 用途:匹配对象的属性值
class Person 
{public string Name { get; set; }public int Age { get; set; }
}Person p = new Person { Name = "VTheshow", Age = 100 };if (p is { Name: "VTheshow", Age: >= 18 }) 
{Console.WriteLine("VTheshow年龄大于18");
}

    5.元组模式(Tuple Pattern)

    • 用途:同时匹配多个值的元组
    var point = (x: 0, y: 1);if (point is (0, 1)) 
    {Console.WriteLine("坐标匹配");
    }// 结合类型和属性
    var result = point switch 
    {(0, 0) => "原点",(var x, var y) when x == y => "对角线",_ => "其他"
    };

    6.位置模式(Positional Pattern)

    • 用途:匹配解构后的对象(需实现 Deconstruct 方法)
    public record Point(int X, int Y); // 自动生成 DeconstructPoint pt = new Point(2, 3);
    if (pt is (2, 3)) 
    {Console.WriteLine("匹配坐标 (2,3)");
    }

    7.递归模式(Recursive Pattern)

    • 用途:嵌套组合多种模式
    if (obj is Person { Name: "HaHa", Age: int age } && age > 20) 
    {Console.WriteLine("HaHa 年龄超过 20");
    }

    8.逻辑模式(Logical Pattern)

    • C#9.0+支持:使用and、or、not组合条件
    int num = 15;
    if (num is > 10 and < 20) 
    {Console.WriteLine("介于 10 和 20 之间");
    }string text = "effective value"
    if (text is not null and not "unknown") 
    {Console.WriteLine("有效值");
    }

    9.列表模式(List Pattern)

    • C#11+支持:匹配数组或列表的元素
    int[] numbers = { 1, 2, 3 };if (numbers is [1, 2, 3]) 
    {Console.WriteLine("完全匹配");
    }if (numbers is [1, .. var rest]) 
    {Console.WriteLine($"剩余元素数量: {rest.Length}"); // 输出 2
    }// 匹配任意长度的列表
    if (numbers is [.., 3]) 
    {Console.WriteLine("以 3 结尾");
    }

    三、switch表达式

    • 用途:简化switch语句,直接返回值
    string Describe(object obj) => obj switch 
    {int i when i > 0 => "正整数",double d => $"双精度数: {d}",string s => $"字符串: {s}",null => "空值",_ => "未知类型"
    };Console.WriteLine(Describe(5)); // 输出 "正整数"

    注意事项

    • 模式顺序:switch 分支按顺序匹配,优先放置具体模式
    • 穷尽性检查:使用 _ 默认分支处理未覆盖的情况
    • 性能:模式匹配通常编译为高效代码,无需担心性能损失

    四、实际应用场景

    1.替代类型检查与转换

    class Circle 
    {public float Radius { get; set; }
    }// 传统写法
    if (shape is Circle) 
    {Circle c = (Circle)shape;Console.WriteLine(c.Radius);
    }// 模式匹配写法
    if (shape is Circle c) 
    {Console.WriteLine(c.Radius);
    }

    2.处理复杂条件

    public class IncomeData 
    {public decimal Income { get; set; } public bool IsCitizen { get; set; } 
    }string GetTaxCategory(IncomeData data) => data switch 
    {{ Income: < 10000 } => "低收入",{ Income: >= 10000 and < 50000, IsCitizen: true } => "中等收入公民",{ Income: >= 50000 } => "高收入",_ => "其他"
    };

    关键点总结

    • 属性模式的依赖:属性模式要求目标类型(如 IncomeData)必须包含对应的属性(如 Income 和 IsCitizen),且属性可访问(通常是 public
    • 模式匹配的优势:这种写法比传统的 if-else 更简洁,尤其是当条件涉及多个属性或嵌套对象时
    • 编译时安全:如果拼写错误(如写成 Incom 而不是 Income),编译器会直接报错,避免运行时错误

    3.解构嵌套对象

    if (student is { Address: { City: "Beijing", ZipCode: "100000" } }) 
    {Console.WriteLine("北京学生");
    }

    五、版本支持

    C#版本支持特性
    7.0基本类型模式、常量模式
    8.0switch 表达式、递归模式、属性模式
    9.0逻辑模式 (and/or/not)
    10.0扩展属性模式(支持嵌套属性)
    11.0列表模式、模式匹配 Span<char>

    http://www.dtcms.com/a/539554.html

    相关文章:

  • 所有工程建设前会在哪个网站公式做网站哪家好 要钱
  • 自己买服务器建设网站手机做网站空间
  • 泉州网站建设企业seo专业实战培训
  • wordpress旅游网站网站上的广告位图片怎么做呢
  • 南雄市住房和城乡建设局网站深圳网站建设公司哪家专业
  • 网站开发题目中关村在线摄影论坛
  • 网站开发周记平面设计兼职网站
  • 寿光做网站网站降权查下
  • 海门建设厅网站网站更换
  • 花都手机网站建设兰州做网站维护的公司
  • 中小型企业网站建设的资金流动租网站服务器
  • 行业外贸网站建设qq企业邮箱注册申请
  • 加盟产品网站建设方案苏州展厅设计企业
  • 网站建设的工作人员一个页面的html5网站模板 psd
  • 响应式网站的字体设置wordpress几十万篇文章
  • 网站源码下载炫酷北京网站建设乐云seo
  • 做旅行义工网站蚁企业网站设计策划案
  • 建站视频教程网自己可以做微信小程序吗
  • 做防腐木花架的网站网站推广效果不好原因是
  • 小程序建站哪家好电脑网页版
  • 旅游网站开发的国内外现状wordpress禁用右键
  • 土特产网站建设宽带网络哪家好
  • 怎么做淘宝劵网站wordpress定时发布批量改已发布
  • 邯郸网站开发定制网站开发技术及特点
  • 英文营销网站网站打不开怎么做
  • 营业执照办好了就可以做网站了吗软件工程35岁就失业吗
  • 怎么只做自己的电商网站职校网站模板
  • 营销型网站源码无锡网站建设要多少钱
  • 咖啡店网站模板怎样看网站是谁做的
  • wordpress连接数据库企业网站如何进行seo