C# 各版本語法新功能匯總

C# 8.0 以后

官網

C# 7.3

》》in

在這里插入圖片描述

C# 7.2

》》 命名參數、具名參數

在這里插入圖片描述

》》》 條件 ref 表達式

在這里插入圖片描述

C# 7.1

》》 default 運算符
default 在C#7.1中得到了改進,不再需要default(T)了

//變量賦值C#7.0
var s = "字符串"; 
s = default(string); C#7.1
var s = "字符串"; 
s = default;//初始化賦值
C#7.0
var dstring = default(string); 
var dint = default(int); 
var dintNull = default(int?); 
var d = default(dynamic); 
var dt = default(DateTime); 
var dt1 = default(DateTime?);C#7.1
string s = default; 
int i = default; 
DateTime? dt = default; 
dynamic d = default;//可選參數
C#7.0
void Test(int a, string b = default(string)) 
{
}C#7.1
void Test(int a, string b = default) 
{
}

》》》 元組功能提供了簡潔的語法來將多個數據元素分組成一個輕型數據結構。
在這里插入圖片描述

(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
// Output:
// Tuple with elements 4.5 and 3.(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
// Output:
// Sum of 3 elements is 4.5.

C# 7.0

》》類型模式
》》格式:expr is type varname, varname 是類型匹配后,賦值的變量名稱。
在這里插入圖片描述
》》常量模式
描述:用于測試表達式計算結果是否為指定的常數值。
格式:expr is constant,
constant 的可以是下面的表達式:

  1. 文字值。
  2. 一個枚舉常量。
  3. 已聲明 const 變量的名稱。

》》var 模式 跟 》》類型模式 一樣
描述:始終匹配成功,可將表達式的值綁定到新局部變量。
格式:expr is var varname
如果 expr 為 null ,is 表達式也為 true, varname 為 null。

static IEnumerable<int> Factor(int number){int max = (int)Math.Sqrt(number);for (int i = 1; i <= max; i++){if (number % i == 0){yield return i;if (i != number / i){yield return number / i;}}}}int[] testSet = { 22, 33, 44, 55};var primes = testSet.Where(n => Factor(n).ToList() is var factors&& factors.Count == 2&& factors.Contains(1)&& factors.Contains(n));

》》》Out 關鍵字

可以在out后面直接聲明變量,例如前TryParse需要先定義再使用的兩行的代碼,現在一行即可: int.TryParse(s, out int num),從而簡化語法。
在這里插入圖片描述

》》 Tuples 元組

元組改進,可以為無組添加名稱,用法:
方式1:定義:(int one, int two) tuple = (1, 2); 使用: WriteLine( " f i r s t : t u p l e . o n e , s e c o n d : t u p l e . t w o " ) ; 。方式 2 :定義: v a r t u p l e 2 = ( o n e : 1 , t w o : 2 ) ; 使用: W r i t e L i n e ( "first:{tuple.one}, second:{tuple.two}");。 方式2:定義:var tuple2 = (one: 1, two: 2); 使用: WriteLine( "firsttuple.one,secondtuple.two");。方式2:定義:vartuple2=(one:1,two:2);使用:WriteLine(“first:{tuple2.one}, second:{tuple2.two}”);。
在這里插入圖片描述

》》》本地方法

在這里插入圖片描述
在這里插入圖片描述

》》 Ref
對ref引用進行了加強,現在可以引用一個方法中的局部變量,
語法是:在方法定義前加上 ref,同時在返回時也加上ref,
如定義函數

ref int GetDataRef(int[] data, int index)
{ 
return ref data[index];
} ref int num = ref GetDataRef(new data[]{1,2,3}, 0);

則 ref int num = ref GetDataRef(new data[]{1,2,3}, 0); 返回,對數組中第0個元素的引用。
在這里插入圖片描述
》》 throw ,之前都說手動拋出異常,C# 7.0 引入了throw表達式

它允許我們在條件表達式中拋出異常。官方的解析說這對提高代碼可讀性有利。如:

在這里插入圖片描述

》》》 數字文本語法改進 這個一般上位機用比較多
在這里插入圖片描述

C# 6.0

》》Import of static type members into namespace
用于簡化書寫。在引用類名后,可以直接使用類的靜態成員,
比如在使用 using static System.String; 后,
可以將 String.IsNullOrEmpty(str) 可以直接寫成 IsNullOrEmpty(str)。
》》只讀自動屬性
只讀自動屬性提供了更簡潔的語法來創建不可變類型。 你聲明僅具有 get 訪問器的自動屬性:
public string FirstName { get; }
public string LastName { get; }
FirstName 和 LastName 屬性只能在構造函數的主體中設置;
在這里插入圖片描述

在這里插入圖片描述

》》 自動屬性初始化表達式

自動屬性初始值設定項可讓你在屬性聲明中聲明自動屬性的初始值。
public class Student
{
public string FirstName { get; } = “xxx”;
public string LastName { get; private set; } = “tttt”;
}
FirstName,LaseName 成員在聲明它的位置處被初始化。 這樣,就能更容易地僅執行一次初始化。 初始化是屬性聲明的一部分,可更輕松地將存儲分配。

》》 Expression-bodied(正文表達式) 函數成員

你編寫的許多成員是可以作為單個表達式的單個語句。 改為編寫 expression-bodied 成員。這適用于方法和只讀屬性
在 C# 7.0 中,你可以在屬性 和索引器 上實現構造函數 、終結器 以及 get 和 set 訪問器
例如,重寫 ToString() 通常是理想之選:
public override string ToString() => $“{LastName}, {FirstName}”;
也可以將此語法用于只讀屬性:
public string FullName => $“{FirstName} {LastName}”;

》》Null 條件運算符 斷路運算符 ?

Null 條件運算符使 null 檢查更輕松、更流暢。 將成員訪問 . 替換為 ?.:
var first = person?.FirstName;
在前面的示例中,如果 Person 對象是 null,則將變量 first 賦值為 null。 否則,將 FirstName 屬性的值分配給該變量。
最重要的是?. 意味著當 person 變量為 null 時,此行代碼不會生成 NullReferenceException。
它會短路并返回 null。 還可以將 null 條件運算符用于數組或索引器訪問。
將索引表達式中的 [] 替換為 ?[]。
first = person?.FirstName ?? “Unspecified”; //?? a??b 當a為null時則返回b,a不為null時則返回a本身。

》》字符串內插

使用 C# 6,新的字符串內插功能可以在字符串中嵌入表達式。
使用 $ 作為字符串的開頭,并使用 { 和 } 之間的表達式代替序號:
public string FullName => $“{FirstName} {LastName}”;

》》異常篩選器

try{doSomething();
} catch(Exception e) when (e.Message.Contains("xx")){ProcessException(e);
} 
//等價于
catch (Exception e){if(e.Message.Contains("xx")) // 如果判斷的邏輯較多,建議使用該方式。{return "Site Moved";}}

》》 nameof

Nameof是一個運算符,用于獲取代碼元素(如變量、類和方法等)的名稱(是的,字符串)。
它通過將名稱作為字符串文字返回來幫助您密切關注名稱!

int myInt = 10;
Console.WriteLine(nameof(myInt)); // Output: “myInt”

在這里插入圖片描述

》》索引器初始化關聯集合, C# 3.0 集合初始化器
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46319.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46319.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46319.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 算法:電話號碼的字母組合 c++

原題鏈接&#x1f517;&#xff1a;電話號碼的字母組合 難度&#xff1a;中等???? 題目 給定一個僅包含數字 2-9 的字符串&#xff0c;返回所有它能表示的字母組合。答案可以按 任意順序 返回。 給出數字到字母的映射如下&#xff08;與電話按鍵相同&#xff09;。注意 …

SpringCloud教程 | 第九篇: 使用API Gateway

1、參考資料 SpringCloud基礎篇-10-服務網關-Gateway_springcloud gateway-CSDN博客 2、先學習路由&#xff0c;參考了5.1 2.1、建了一個cloudGatewayDemo&#xff0c;這是用來配置網關的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 該接口代碼如…

git clone命令, 克隆遠程倉庫

這個應該是最簡單的命令&#xff0c;當別人扔給你一個*****.git鏈接&#xff0c;你要知道怎么用&#xff0c;但是還需要注意以下幾點&#xff1a; 1. 你在該網站上是否有賬號 2. 你在該網站上的賬號是否是該項目的成員&#xff0c;如果不是&#xff0c;那可能clone不了 3. 本機…

WSL-Ubuntu20.04部署環境配置

1.更換Ubuntu軟件倉庫鏡像源 為了在WSL上使用TensorRT進行推理加速&#xff0c;需要安裝以下環境&#xff0c;下面將按以下順序分別介紹安裝、驗證以及刪除環境&#xff1a; #1.C環境配置 gcc、gdb、g #2.gpu環境 cuda、cudnn #3.Cmake環境 CMake #4.OpenCV環境 OpenCV #5.Ten…

vxe-grid 實現配置式form搜索條件 form搜索條件框可折疊 配置式table

文章目錄 效果圖代碼 效果圖 代碼 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Zoom視頻會議軟件使用

Zoom是一款廣受歡迎的視頻會議軟件&#xff0c;使用它可以輕松地進行遠程會議、在線培訓和團隊協作等。要充分利用Zoom軟件的功能&#xff0c;以下是詳細具體的使用方法和步驟&#xff1a; 下載安裝 下載&#xff1a;訪問Zoom官方網站&#xff0c;根據使用的操作系統下載相應的…

ttkefu在線客服系統 機器人+人工客服 全渠道接入客戶咨詢

ttkefu在線客服系統是一種集成了機器人客服與人工客服&#xff0c;并支持全渠道接入客戶咨詢的綜合解決方案。這種系統能夠顯著提升客戶服務效率&#xff0c;優化客戶體驗&#xff0c;同時幫助企業降低運營成本 1. 智能機器人客服 自動回復&#xff1a;機器人客服能夠自…

Java集合框架的內部揭秘:List、Set與Map的深潛之旅

Java集合框架是一套強大的工具&#xff0c;為開發者提供了靈活的數據管理方式。本文將深入剖析List、Set和Map的內部機制&#xff0c;通過詳細的示例和擴展討論&#xff0c;帶你領略這些數據容器的真諦。 一、List&#xff1a;有序序列的深度剖析 List接口是一個可以包含重復…

自制連點器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下載鏈接&#xff1a;鏈接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取碼&#xff1a;yxo1

20.x86游戲實戰-遠線程注入的實現

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Spring Boot 中,監聽應用程序啟動的生命周期事件的4種方法

文章目錄 前言在 Spring Boot 中&#xff0c;監聽應用程序啟動的生命周期事件有多種方法。你可以使用以下幾種方式來實現&#xff1a; 一、使用 ApplicationListener二、使用 EventListener三、實現 CommandLineRunner 或 ApplicationRunner四、使用 SmartLifecycle總結 前言 …

Spring AI 應用開發中設置訪問 Ollama 的超時時間

使用 Spring AI 開發 AI 應用時&#xff0c;Ollama 通常在本地開發和測試時使用&#xff0c;用來在本地運行大模型。由于本地開發機器的資源限制&#xff0c;當使用 Ollama 運行較大的模型時&#xff0c;大模型給出響應的時間會比較長。Spring AI 提供的 OllamaChatModel 與 Ol…

在Mac上免費恢復誤刪除的Word文檔

Microsoft Word for Mac是一個有用的文字處理應用程序&#xff0c;它與Microsoft Office套件捆綁在一起。該軟件的穩定版本包括 Word 2019、2016、2011 等。 Word for Mac 與 Apple Pages 兼容;這允許在不同的操作系統版本中使用Word文檔&#xff0c;而不會遇到任何麻煩。 與…

【數據結構】非線性表----樹詳解

樹是一種非線性結構&#xff0c;它是由**n&#xff08;n>0&#xff09;**個有限結點組成一個具有層次關系的集合。具有層次關系則說明它的結構不再是線性表那樣一對一&#xff0c;而是一對多的關系&#xff1b;隨著層數的增加&#xff0c;每一層的元素個數也在不斷變化&…

逆向案例二十三——請求頭參數加密,某區塊鏈交易逆向

網址&#xff1a;aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析&#xff0c;發現請求頭有X-Apikey參數加密&#xff0c;其他表單和返回內容沒有加密。 直接搜索關鍵字&#xff0c;X-Apikey&#xff0c;找到疑似加密位置&#xff0c;注意這里…

零基礎學習Python(三)

1. 多重繼承 一個子類可以繼承多個父類&#xff0c;這與一些編程語言的規則不通。 如果多個父類中有同名的變量和方法&#xff0c;子類訪問的順序是按照繼承時小括號里書寫的順序進行訪問的。 可以用issubclass(B, A)方法判斷B是否為A的子類。 2. 綁定 類中的方法通過參數s…

《TF2.x強化學習手冊》P59-P65-SARSA-Q-learning

文章目錄 實現SARSA算法和對應的強化學習智能體前期準備實現步驟工作原理初始化算法流程 構建基于Q學習的智能體前期準備實現步驟工作原理SARSA 算法的收斂性&#xff1a;SARSA 適合在線學習和真實系統&#xff1a;Q 學習算法的適用性&#xff1a; 實現SARSA算法和對應的強化學…

HDC使用常見命令

HDC&#xff08;HarmonyOS Device Connector&#xff09;是為開發人員提供的用于調試的命令行工具&#xff0c;通過該工具可以在windows/linux/mac系統上與真實設備進行交互。 使用HDC前&#xff0c;需要配置相關環境變量&#xff1a; 在此電腦 > 屬性 > 高級系統設置 &g…

Git常用命令以及使用IDEA集成Gitee

目錄 一、設置用戶簽名 二、初始化本地庫 三、查看本地庫狀態 四、添加文件到暫存區 五、提交本地庫 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、創建分支 9.3、切換分支 9.4、合并分支 十、團隊協作 十一、Idea集成Git 11.1、配…

Github 2024-07-15 開源項目周報 Top15

根據Github Trendings的統計,本周(2024-07-15統計)共有15個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目5非開發語言項目4JavaScript項目3TypeScript項目2Go項目1Solidity項目1Java項目1Rust項目1免費編程學習平臺:freeCodeCamp.org 創建…