前言
C# 各個(gè)版本的語(yǔ)法糖隨著語(yǔ)言的更新逐漸演變。語(yǔ)法糖是為了簡(jiǎn)化代碼而設(shè)計(jì)的,使得開(kāi)發(fā)者能夠更快速、簡(jiǎn)潔地完成某些常見(jiàn)的操作。下面我將按 C# 版本介紹一些主要的語(yǔ)法糖,并給出對(duì)應(yīng)的示例代碼。
1. C# 1.0: 基本語(yǔ)法
C# 1.0 引入了面向?qū)ο缶幊痰幕A(chǔ)語(yǔ)法,包含類(lèi)、對(duì)象、繼承等基本結(jié)構(gòu)。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
var person = new Person("John", 30);
Console.WriteLine(person.Name);
2. C# 2.0: 泛型和匿名方法
2.1 泛型
泛型使得代碼更加靈活,避免了使用不安全的類(lèi)型轉(zhuǎn)換。
List<int> numbers = new List<int> { 1, 2, 3, 4 };
foreach (var number in numbers)
{
Console.WriteLine(number);
}
2.2 匿名方法
匿名方法允許你直接在代碼中定義方法,而無(wú)需顯式聲明一個(gè)方法名。
Func<int, int, int> add = delegate(int x, int y) { return x + y; };
Console.WriteLine(add(3, 4));
3. C# 3.0: 自動(dòng)屬性、匿名類(lèi)型、擴(kuò)展方法、LINQ
3.1 自動(dòng)屬性
C# 3.0 引入了自動(dòng)屬性的概念,簡(jiǎn)化了屬性的定義。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
3.2 匿名類(lèi)型
匿名類(lèi)型允許你在沒(méi)有明確類(lèi)型定義的情況下創(chuàng)建一個(gè)對(duì)象。
var person = new { Name = "John", Age = 30 };
Console.WriteLine(person.Name);
3.3 LINQ(語(yǔ)言集成查詢)
LINQ 提供了更簡(jiǎn)潔的方式來(lái)操作集合數(shù)據(jù)。
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
evenNumbers.ForEach(Console.WriteLine); // 輸出 2, 4
3.4 擴(kuò)展方法
擴(kuò)展方法允許你給現(xiàn)有類(lèi)型添加方法,而不需要修改它們。
public static class StringExtensions
{
public static bool IsCapitalized(this string str)
{
return char.IsUpper(str[0]);
}
}
Console.WriteLine("Hello".IsCapitalized());
4. C# 4.0: 動(dòng)態(tài)類(lèi)型、命名參數(shù)和可選參數(shù)
4.1 動(dòng)態(tài)類(lèi)型
dynamic 類(lèi)型允許你繞過(guò)靜態(tài)類(lèi)型檢查,類(lèi)似于 JavaScript。
dynamic value = 10;
Console.WriteLine(value.GetType());
value = "Hello";
Console.WriteLine(value.GetType());
4.2 命名參數(shù)和可選參數(shù)
C# 4.0 引入了命名參數(shù)和可選參數(shù),簡(jiǎn)化了方法調(diào)用。
public void DisplayInfo(string name, int age = 18)
{
Console.WriteLine($"Name: {name}, Age: {age}");
}
DisplayInfo(name: "John");
DisplayInfo("Jane", age: 25);
5. C# 5.0: 異步編程
5.1 async 和 await
C# 5.0 引入了 async 和 await,使得異步編程變得更加簡(jiǎn)潔。
public async Task<int> CalculateSumAsync(int a, int b)
{
await Task.Delay(1000);
return a + b;
}
public async Task Run()
{
int result = await CalculateSumAsync(5, 7);
Console.WriteLine(result);
}
6. C# 6.0: 表達(dá)式體成員、字符串插值
6.1 表達(dá)式體成員
C# 6.0 引入了表達(dá)式體成員,讓 getter、setter 或方法體更加簡(jiǎn)潔。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Description => $"{Name} is {Age} years old";
}
var person = new Person { Name = "John", Age = 30 };
Console.WriteLine(person.Description);
6.2 字符串插值
C# 6.0 引入了字符串插值,簡(jiǎn)化了字符串拼接。
string name = "John";
int age = 30;
Console.WriteLine($"Name: {name}, Age: {age}");
7. C# 7.0: 值元組
7.1 值元組
C# 7.0 引入了值元組,使得返回多個(gè)值變得更簡(jiǎn)單。
public (string Name, int Age) GetPersonInfo()
{
return ("John", 30);
}
var person = GetPersonInfo();
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
8. C# 8.0: 異步流、空值合并賦值操作符
8.1 異步流
C# 8.0 引入了異步流,使得處理異步數(shù)據(jù)流變得更方便。
public async IAsyncEnumerable<int> GetNumbersAsync()
{
for (int i = 0; i < 5; i++)
{
await Task.Delay(1000);
yield return i;
}
}
public async Task Run()
{
await foreach (var number in GetNumbersAsync())
{
Console.WriteLine(number);
}
}
8.2 空值合并賦值操作符
C# 8.0 引入了空值合并賦值操作符 ??=,簡(jiǎn)化了對(duì)空值的檢查和賦值。
string? name = null;
name ??= "Default Name";
Console.WriteLine(name);
9. C# 9.0: 記錄類(lèi)型、初始化器
9.1 記錄類(lèi)型
C# 9.0 引入了記錄類(lèi)型,它是一個(gè)專門(mén)用來(lái)存儲(chǔ)數(shù)據(jù)的類(lèi)型,且具有不可變的特性。
public record Person(string Name, int Age);
var person = new Person("John", 30);
Console.WriteLine(person.Name);
9.2 初始化器
C# 9.0 提供了更簡(jiǎn)潔的方式來(lái)創(chuàng)建和初始化對(duì)象。
Person person = new() { Name = "John", Age = 30 };
Console.WriteLine(person.Name);
10. C# 10.0: 文件作用域的命名空間
10.1 文件作用域的命名空間
C# 10.0 引入了文件作用域命名空間,使得代碼更簡(jiǎn)潔。
namespace MyNamespace;
public class Person
{
public string Name { get; set; }
}
總結(jié)
C# 的每個(gè)版本都帶來(lái)了許多改進(jìn),語(yǔ)法糖的不斷增加使得代碼更加簡(jiǎn)潔、易讀且高效。從 C# 1.0 到 C# 10.0,語(yǔ)言的演進(jìn)顯著提高了開(kāi)發(fā)體驗(yàn),并解決了許多開(kāi)發(fā)中的常見(jiàn)問(wèn)題。通過(guò)掌握這些語(yǔ)法糖,開(kāi)發(fā)者能夠?qū)懗龈雍?jiǎn)潔、清晰的代碼。
閱讀原文:原文鏈接
該文章在 2025/8/8 13:08:37 編輯過(guò)