nint和Pattern matching介绍(C#)

nint
最近看C# 9.0时,发现一个有意思的关键词,就是nint,第一次看到这个,于是好奇心爆棚,就去实际操作了一下。

nint i = 1000;
Console.WriteLine("i={0}", i);

在这里插入图片描述

实际结果与int的结果是一样的,那为什么还要出一个nint关键字?这个关键字的用途到底在哪里?带着问题继续去探索。
对源代码进行了查看,发现nint是IntPtr的结构体,如果你做过C#与C++之间的交互,我相信你对IntPtr是非常的熟悉,IntPtr是一个指针类型,现在直接提供关键词nint进行支持,让你能够在类型安全的前提下使用指针。

IntPtr i = (IntPtr)1000;
Console.WriteLine("i={0}", i);

这样我就可以对我之前做的关于在C#中进行内存对齐的代码用nint进行简化了,代码如下所示:

public unsafe struct RTCPointQuery8{public fixed float x[8];public fixed float y[8];public fixed float z[8];public fixed float time[8];public fixed float radius[8];}
Span<byte> stack = stackalloc byte[sizeof(RTCPointQuery8) + 32];
ref var test = ref StackAllocAligned<RTCPointQuery8>(stack, 32);static unsafe ref T StackAllocAligned<T>(Span<byte> stack, nuint alignment) where T : unmanaged{return ref Unsafe.AsRef<T>((void*)(((nint)Unsafe.AsPointer(ref MemoryMarshal.GetReference(stack))+ ((nint)alignment - 1)) & ~(nint)(alignment - 1)));}

Pattern matching improvements(模式匹配)

模式匹配是解决if-else嵌套的情形,例如:现在各个地方都在发放消费券,消费券的规则如下:
性别 年龄 地区 面值
男 <20 江苏 1800
男 <45 上海 3000
男 剩余 剩余 2000
女 <20 浙江 1800
女 <60 浙江 2500
如果使用传统的方式实现这个过程,你首先想到的是if-else,如下所示:

public static decimal get_ticket(string sex, int age, string district){if(sex == "男"){if(age < 20 && district == "江苏"){return 1800;}else{if(age < 45 && district == "上海"){return 3000;}else{return 2000;}}}else{if(age < 20 && district == "浙江"){return 1800;}else if(age < 60 && district == "浙江"){return 2500;}}return 0;}

这样写倒也是可以的,就是看着不太舒服,if-else太多了,看得眼花缭乱;接下来我们使用模式匹配,看看代码会是什么样子,如下所示:

public static decimal get_ticket_pattern(string sex, int age, string distinct){return (sex, age, distinct) switch{("男", < 20, "江苏") => 1800,("男", < 45, "上海") => 3000,("男", _, _) => 2000,("女", < 20, "浙江") => 1800,("女", < 60, "浙江") => 2500,_ => 0};}

这种简化后的代码看着让人舒服多了,这就是Pattern matching要帮助你解决的场景。
两者运行的效果是一样的,如下所示:
在这里插入图片描述

但是Pattern matching在转化成底层代码之后,也是if-else的模式;玩法有千万种,绝对让你瞠目结舌,就看你能不能玩出新的花样来。当然,这个特性最重要的是你要明白它的客户群体在哪里?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM裸机-19(NandFlash和iNand)

1、NandFlash的接口 1.1、Nand的型号与命名 (1)、Nand的型号命名都有含义&#xff0c;就拿K9F2G08来示例分析一下&#xff1a;K9F表示是三星公司的NandFlash系列。2G表示Nand的大小是2Gbit (256MB)。08表示Nand是8位的 (8位就是数据线有8根)。 (2)、Nand命名中可以看出&#x…

【2023.11.23】JDBC基本连接语法学习➹

1.导入jar包依赖&#xff1a;mysql-connector-java-8.0.27.jar 2.连接数据库&#xff01; 3.无法解析类->导入java.sql.*&#xff0c;&#xff08;将项目方言改为Mysql&#xff09; JDBC&#xff0c;启动&#xff01;&#xff01; public class Main {public static voi…

如何下载OpenJDK及其源码

如果想下载 OpenJDK&#xff0c;存在以下几种办法&#xff1a; 最简单的办法是去 OpenJDK 官网&#xff0c;这里能下载 JDK9 及其以上的版本&#xff0c;还有 JDK 源码所在的 github 地址。 第二种方法是使用 IDEA 下载&#xff0c;位置在 File->Project Structure->SD…

【Vue】核心特性(响应式)

响应式&#xff1a; 数据变化&#xff0c;视图自动更新 接下来使用一个例子来体现一下什么是响应式 案例一&#xff1a; 访问数据&#xff0c;视图自动更新 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…

【人生苦短,我学 Python】(1)初识 Python

目录 1. 简述2. 什么是 Python&#xff1f;3. 面向对象简述3.1 面向过程3.2 面向对象3.3 面向对象的主要优点3.4 面向对象的基本概念3.5 面向对象程序设计 4. Python语言的版本和解释器5. Python 编程工具6. Python 的三种编程方式7. 简单的 Python 程序8. 高级一点的 Python 程…

数据通信与计算机网络(精炼知识点)

前言 该部分知识点不多,分值3分 知识点 TCP TCP采用可变大小的滑动窗口协议进行流量控制。在前向纠错系统中,当接收端检测到错误后就根据纠错编码的规律自行纠错;在后向纠错系统中,接收方会请求发送方重发出错分组。IP协议不预先建立虚电路,而是对每个数据报独立地选择…

Linux快速显示文件行号并跳转

有时候&#xff0c;想要在线上直接查看日志文件&#xff0c;搜索到关键词后&#xff0c;如果一直按n找下去&#xff0c;很麻烦&#xff0c;我们可以先显示出行号&#xff0c;确定好我们要找内容对应的行号&#xff0c;直接跳转过去。 esc进入命令模式&#xff0c;输入:set nu命…

Cesium:CGCS2000坐标和WGS84坐标互相转换

作者:CSDN @ _乐多_ 本文记录了CGCS2000坐标和WGS84经纬度互相转换的js代码。封装成了函数。 文章目录 一、WGS84ToCGCS2000二、CGCS2000ToWGS84一、WGS84ToCGCS2000 import proj4 from "proj4";convertWGS84ToCGCS2000(wgs84X, wgs84Y, wgs84Z)

Amlogic方案遥控器配置(Android11)

配置路线 键值变化路径&#xff1a; ScanCode --> Keycode Lable --> KeyCode Layout --> KeyLable --> Keycode – > KeyEvent 文件映射路径&#xff1a; *.dtsi --> input-event-codes.h --> *.kl --> InputEventLable.h --> kecodes.h --> P…

通过这个简单的技巧让我们的 JavaScript 代码变得异常快

通过这个简单的技巧让我们的 JavaScript 代码变得异常快 秘诀&#xff1a;了解JavaScript 虚拟机(VM)的内部工作原理。 首先&#xff0c;我们来谈谈像 V8 这样的JavaScript 虚拟机(VM)。可以把它想象成我们的操作的大脑 —— 它将我们简洁的代码变成计算机可以理解和执行的东…

免费图书教材配套资料:Spark大数据技术与应用(第2版)

《Spark大数据技术与应用&#xff08;第2版&#xff09;》课程内容全面介绍了Spark大数据技术的相关知识&#xff0c;内容包含包括Spark概述、Scala基础、Spark编程、Spark编程进阶、Spark SQL结构化数据文件处理、Spark Streaming实时计算框架、Spark GraphX图计算框架、Spark…

方法签名【C#】

1条件&#xff1a; 签名的作用&#xff1a;为了在众多方法中找到匹配的方法。【自己想要的方法】类似明星的签名。虽然2个人的名字一样&#xff0c;但并不是同一个人&#xff0c;这就需要用到签名的条件。 方法名称&#xff1a;注意大小写。 参数个数。 参数类型及顺序&…

STL—next_permutation函数

目录 1.next_permutation函数的定义 2.简单使用 2.1普通数组全排列 2.2结构体全排列 2.3string 3.补充 1.next_permutation函数的定义 next_permutation函数会按照字母表顺序生成给定序列的下一个较大的排列&#xff0c;直到整个序列为降序为止。与其相对的还有一个函数—…

实用工具推荐 | 在线制作电子书

​随着互联网的发展&#xff0c;越来越多的人开始关注知识的传播和分享。而电子书作为一种方便携带、易于分享的形式&#xff0c;越来越受到人们的青睐。今天&#xff0c;就为大家推荐一款实用的工具——FLBOOK在线制作电子杂志平台&#xff0c;让你轻松在线制作电子书&#xf…

【python学习】基础篇-常用模块-re模块:正则表达式高效操作字符串

在Python中&#xff0c;正则表达式主要通过re模块来实现。以下是一些常用的正则表达式用法&#xff1a; 匹配值&#xff1a; pattern r\d # 匹配一个或多个数字 pattern r\b\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\b #匹配日期格式 pattern rhello # 匹配字符串“hello”\…

【LeetCode】挑战100天 Day12(热题+面试经典150题)

【LeetCode】挑战100天 Day12&#xff08;热题面试经典150题&#xff09; 一、LeetCode介绍二、LeetCode 热题 HOT 100-142.1 题目2.2 题解 三、面试经典 150 题-143.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站&#xff0c;提供各种算法和数据结构的题目&…

HTTP客户端警告:Going to buffer response body of large or unknown size

HTTP客户端警告&#xff1a;Going to buffer response body of large or unknown size 点关注不迷路&#xff0c;欢迎再访&#xff01; 精简博客内容&#xff0c;尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 目录 HTTP客…

IAR为恩智浦S32M2提供全面支持,提升电机控制能力

IAR Embedded Workbench for Arm已全面支持恩智浦最新的S32系列&#xff0c;可加速软件定义汽车的车身和舒适性应用的开发 瑞典乌普萨拉&#xff0c;2023年11月22日 – 嵌入式开发软件和服务的全球领导者IAR现已全面支持恩智浦半导体&#xff08;NXP Semiconductors&#xff0…

python脚本后台执行

nohup python script.py &

CMS垃圾收集器深入解析

1.CMS的两种模式与一种特殊策略 1.1Backgroud CMS(没有并发失败的情况) 1.1.1并发标记还能被整理成两个流程 (1)初始标记 (2)并发标记(3)(4)在这个阶段发生(3)并发预处理 (4)可中止的预处理 (5)重新标记 (6)并发清除 1.1.2为什么我们的并发标记细化之后还会额外有两个流…