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.pswp.cn/news/164653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164653.shtml
英文地址,請注明出處:http://en.pswp.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為什么我們的并發標記細化之后還會額外有兩個流…