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