C# 10.0 随着 .NET 6 的发布而推出,为开发者带来了一系列语言层面的改进和增强,旨在减少样板代码、提升代码可读性和开发效率。
下面是 C# 10.0 的主要新增特性及示例:
1️⃣ 全局 using 指令(Global Using Directives)
-
作用:在项目中可以一次性声明常用的 using 指令,而不必在每个文件中重复书写,减少样板代码。
-
示例:
// GlobalUsings.cs global using System; global using System.Collections.Generic; global using System.Linq;
在项目中的其他文件中,就无需重复写入这些 using 指令。
2️⃣ 文件范围的命名空间声明(File-Scoped Namespace Declaration)
-
作用:使用文件范围的命名空间声明可以减少嵌套层级,使文件结构更简洁。
-
示例:
// 传统写法 namespace MyApp { class Program { static void Main(string[] args) { Console.WriteLine("Hello, C# 10!"); } } } // 文件范围命名空间写法(推荐) namespace MyApp; class Program { static void Main(string[] args) { Console.WriteLine("Hello, C# 10!"); } }
3️⃣ 记录结构(Record Structs)
-
作用:在 C# 10 中,除了记录类(reference record)外,还可以定义记录结构(value type record),这对于需要不可变值类型数据传输对象非常有用。
-
示例:
public readonly record struct Point(int X, int Y); // 使用记录结构 var p1 = new Point(3, 4); var p2 = p1 with { X = 10 }; // 使用 with 表达式创建修改副本 Console.WriteLine(p1); // 输出:Point { X = 3, Y = 4 } Console.WriteLine(p2); // 输出:Point { X = 10, Y = 4 }
4️⃣ 常量插值字符串(Constant Interpolated Strings)
-
作用:C# 10 允许如果所有插值部分都是编译时常量,则整个插值字符串也可以被声明为常量。
-
示例:
const string name = "World"; const string greeting = $"Hello, {name}!"; Console.WriteLine(greeting); // 输出:Hello, World!
这在需要编译时常量的场景(例如特性参数)中非常有用。
5️⃣ 改进的 Lambda 表达式
-
作用:C# 10 对 Lambda 表达式进行了进一步改进,支持在 Lambda 表达式中添加属性,以及更好地推断返回类型,使得 Lambda 的书写更加灵活。
-
示例(带属性的 Lambda):
using System; // 示例:为 Lambda 表达式添加属性 [Obsolete("Use a different lambda approach", true)] Func<int, int> square = x => x * x; Console.WriteLine(square(5)); // 如果启用了警告则会提示过时信息
注意:属性应用到 Lambda 的场景较少见,更多改进在于类型推断和语法简化。
6️⃣ 扩展属性模式(Extended Property Patterns)
-
作用:在模式匹配中,扩展了对对象属性的匹配能力,使得对嵌套属性的检查更加简洁直观。
-
示例:
public class Person { public string Name { get; set; } public Address Address { get; set; } } public class Address { public string City { get; set; } } // 使用扩展属性模式进行模式匹配 string GetCityGreeting(object obj) => obj is Person { Address.City: var city } ? $"Hello from {city}!" : "Unknown location"; var person = new Person { Name = "Alice", Address = new Address { City = "Seattle" } }; Console.WriteLine(GetCityGreeting(person)); // 输出:Hello from Seattle!
总结
C# 10.0 的新特性主要聚焦于:
- 减少样板代码:通过全局 using 指令和文件范围的命名空间声明,减少重复代码,提高项目整体可读性。
- 增强数据建模能力:记录结构(Record Structs)和常量插值字符串让不可变数据模式更灵活。
- 改进语言表达力:对 Lambda 表达式和模式匹配的进一步增强,使得开发者能写出更简洁、直观的代码。
这些新特性共同提升了 C# 的开发体验,使得语言更加现代化。
如果你在整理 C# 的版本演进,C# 10.0 代表了在语法简洁性和项目结构组织方面的一次重要革新。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现