2025年的C#:实践中有哪些新变化?
.NET世界从未止步。2025年,C#语言持续积极发展,为开发人员提供了编写更简洁、更安全、更高性能代码的工具。平台的每次更新都让日常开发变得更加便捷,而新的语言结构则有助于摆脱样板代码。
在本文中,我们将解析2025年C#的三项关键新特性,您现在就可以开始使用它们。所有代码示例均来自实际实践,并已针对教育门户网站pythonlib.ru进行了调整。
1. 主构造函数 (Primary Constructors)
最受期待的新特性之一是类和结构的主构造函数。以前,此功能仅适用于记录 (record)。现在,您可以直接在类头中声明构造函数参数,这大大减少了代码量。
让我们看一个创建用户模型的经典示例:
之前 (C# 12及更早版本):
public class User{ public string Name { get; } public int Age { get; }
public User(string name, int age) { Name = name; Age = age; }}现在 (C# 2025):
public class User(string name, int age){ public string Name { get; } = name; public int Age { get; } = age; public string Greeting => $"你好,{Name}! 你{Age}岁了。";}如您所见,代码变得更简洁了。参数 name 和 age 现在可以在整个类体中使用。这在 ASP.NET Core 中使用依赖注入 (DI) 时尤其方便:
public class WeatherService(HttpClient httpClient, ILogger<WeatherService> logger){ public async Task<string> GetWeatherAsync(string city) { logger.LogInformation("正在请求城市 {City} 的天气", city); var response = await httpClient.GetStringAsync($"https://api.weather.com/{city}"); return response; }}主构造函数使您可以省去大量字段和显式赋值,使代码更具声明性。
2. 新型集合 (Collection Expressions)
2025年,C#获得了强大的集合操作更新。现在,您可以使用统一的语法——集合表达式 (collection expressions) 来初始化列表、数组,甚至 Span<T>。
新语法使用方括号 [] 代替花括号 {} 或 new List<T>():
各种集合的初始化示例:
// 数组int[] numbers = [1, 2, 3, 4, 5];
// 列表List<string> names = ["安娜", "鲍里斯", "维克多"];
// Span (无需分配)Span<char> letters = ['A', 'B', 'C'];主要亮点是展开运算符 (spread) ..。它允许您在不调用 .Concat() 或 .AddRange() 的情况下合并集合:
int[] first = [1, 2, 3];int[] second = [4, 5, 6];
// 合并数组int[] combined = [..first, ..second]; // [1, 2, 3, 4, 5, 6]
// 在开头和结尾添加元素int[] extended = [0, ..combined, 7]; // [0, 1, 2, 3, 4, 5, 6, 7]此语法不仅适用于数组,还适用于 List<T>、HashSet<T>,甚至适用于实现了 ICollection<T> 的自定义集合。对于习惯了Python的开发人员来说,这种方法会感觉非常熟悉和直观。
3. 改进的字符串插值和异常处理
2025年C#中的字符串插值获得了几项重要改进,使其更加灵活。
3.1. 在 nameof 运算符中进行插值
现在您可以