C# 語法糖總結(jié)25條
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
C# 語法糖是 C# 編程語言中為了簡(jiǎn)化代碼和提高代碼可讀性而引入的一系列語言特性。這些特性在編譯時(shí)會(huì)被轉(zhuǎn)換成更基本的代碼形式,但在編寫代碼時(shí)提供了更加簡(jiǎn)潔和直觀的方式。以下是對(duì) C# 中常見語法糖的一個(gè)總結(jié): 1.表達(dá)式體屬性:使用 => 運(yùn)算符定義屬性的 getter 或 setter。
public string FullName => FirstName + " " + LastName;
2.隱式類型局部變量(var 關(guān)鍵字):編譯器根據(jù)初始化表達(dá)式推斷變量的類型。
var number = 42; // 推斷為 int 類型
3.Lambda 表達(dá)式:定義匿名函數(shù)的簡(jiǎn)潔方式。
Func<int, int, int> add = (x, y) => x + y;
4.表達(dá)式體成員:用于方法和委托。
public int Square(int x) => x * x;
5.字符串插值:在字符串中嵌入變量或表達(dá)式的值。 string message = $"Hello, {name}!"; 6.空合并運(yùn)算符(??):當(dāng)左側(cè)操作數(shù)為 null 時(shí),返回右側(cè)操作數(shù)的值。
string result = value ?? "Default Value";
7.異步/等待(async/await):簡(jiǎn)化異步編程模型。 public async Task<string> GetWebPageAsync(string url) { using (var client = new HttpClient()) { return await client.GetStringAsync(url); } } 8.使用語句(using 聲明):自動(dòng)釋放資源,如文件和網(wǎng)絡(luò)連接。 using (var file = new StreamReader("file.txt")) { // 讀取文件內(nèi)容 } // file 對(duì)象在這里會(huì)被自動(dòng)釋放
9.命名參數(shù):在調(diào)用方法時(shí),通過參數(shù)名指定參數(shù)值,提高代碼可讀性。 MyMethod(name: "Alice", age: 30); 10.默認(rèn)參數(shù)值:在方法聲明中為參數(shù)指定默認(rèn)值。
public void MyMethod(string name = "Default") { /* ... */ }
11.擴(kuò)展方法:允許你為已存在的類型添加新的方法,而無需創(chuàng)建新的派生類。這使得你可以在不修改原始代碼的情況下擴(kuò)展類的功能。 public static class StringExtensions { public static string ToUpperInvariant(this string s) { return s.ToUpper(CultureInfo.InvariantCulture); } } 12.名稱空間別名:允許你為名稱空間或類型定義別名,以簡(jiǎn)化代碼中的引用。 using System.Collections.Generic; using List = System.Collections.Generic.List<int>; // 定義別名 List numbers = new List(); // 使用別名
13.空條件運(yùn)算符(?.):當(dāng)左側(cè)的操作數(shù)不為 null 時(shí),才訪問其成員或調(diào)用其方法。這可以避免 NullReferenceException。 string text = null; int? length = text?.Length; // 如果 text 為 null,則 length 為 null;否則為 text 的長(zhǎng)度 14.元組:從 C# 7.0 開始,可以使用 ValueTuple 來創(chuàng)建輕量級(jí)的、不可變的數(shù)據(jù)結(jié)構(gòu),用于表示具有多個(gè)值的單個(gè)對(duì)象。 var person = (Name: "Alice", Age: 30); Console.WriteLine(person.Name); // 輸出 "Alice"
15.模式匹配:C# 7.0 及更高版本引入了模式匹配功能,包括 is 類型模式和 switch 表達(dá)式,使得在條件語句中檢查類型和執(zhí)行相應(yīng)操作變得更加簡(jiǎn)潔。 object obj = "hello"; if (obj is string s) { Console.WriteLine(s.ToUpper()); // 輸出 "HELLO" } 16.棄元(Discard):使用下劃線 _ 作為占位符來表示不關(guān)心的變量值,這在解構(gòu)賦值或模式匹配中特別有用。
var (first, _) = GetTuple(); // 只關(guān)心第一個(gè)值,忽略第二個(gè)值
17.范圍(Range)操作符:C# 8.0 引入了范圍操作符 ..,它允許你指定一個(gè)序列的子范圍。 int[] numbers = { 0, 1, 2, 3, 4, 5 }; int[] subArray = numbers[1..4]; // { 1, 2, 3 } 18.頂級(jí)語句:C# 9.0 及更高版本允許在編譯單元的頂層直接編寫語句,而無需包含在方法或類中。這簡(jiǎn)化了腳本和小型程序的編寫。 using System; Console.WriteLine("Hello, World!"); // 直接在頂層編寫的語句
19.記錄(Record)類型:C# 9.0 引入了記錄類型,它提供了更簡(jiǎn)潔的語法來定義不可變數(shù)據(jù)類型的值語義,并自動(dòng)實(shí)現(xiàn)相等性、哈希碼和字符串表示形式。
public record Person(string Name, int Age);
20.可空類型:使用可空類型(如 int?)可以表示值類型的空值,避免了使用默認(rèn)值來表示空值的問題。 int? age = null; if (age.HasValue) { // 處理非空值的情況 }
21.nameof 表達(dá)式:返回變量、類型或成員的名稱作為字符串,主要用于異常消息、日志記錄等。 string name = "Alice"; Console.WriteLine(nameof(name)); // 輸出 "name" 22.拋出表達(dá)式(Throw expressions):允許在表達(dá)式中使用 throw 語句,而不僅僅是在語句中。
return someCondition ? someValue : throw new InvalidOperationException();
23.使用聲明(Using declarations):從 C# 8.0 開始,可以在代碼塊內(nèi)部直接聲明 using 變量,而無需在外部聲明和初始化。 using var file = new StreamReader("file.txt"); // 使用 file 進(jìn)行操作... // 在代碼塊結(jié)束時(shí),file 會(huì)被自動(dòng)釋放 24.LINQ(Language Integrated Query):允許你在 C# 中直接編寫查詢語句,而無需使用額外的查詢語言。 var query = from p in people where p.Age > 18 select p.Name;
25.條件編譯指令:使用如 #if, #else, #endif 等預(yù)處理指令,可以根據(jù)不同的編譯條件包含或排除代碼塊。這對(duì)于跨平臺(tái)開發(fā)或調(diào)試非常有用。 #if DEBUG Console.WriteLine("Debug mode is enabled."); #endif 該文章在 2024/4/1 17:03:26 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |