C# 14 重磅发布!5 个让代码更简洁的新特性
C# 14 重磅发布!5 个让代码更简洁的新特性
文 | McCoy Zhang
写在前面
去年 11 月,.NET 10 正式发布,随之而来的 C# 14 带来了一系列让人眼前一亮的新特性。
作为一个写了 10 年 C# 的老兵,我第一时间体验了这些新功能。平心而论,C# 14 这次的更新非常接地气——不是那种花里胡哨的炫技功能,而是实实在在能提升开发体验的改进。
今天这篇文章,我用最通俗的方式,带你快速掌握 C# 14 最实用的 5 个新特性。
1️⃣ 文件级应用:终于可以甩开项目文件了!
以前的痛
在 C# 14 之前,如果你想运行一个简单的 C# 文件测个代码,需要经历以下步骤:
- 创建一个解决方案(.sln)
- 创建一个项目文件(.csproj)
- 写几行代码
dotnet run
就为了验证一个简单的想法,光项目文件就要写一大堆配置。
C# 14 的解决方案
现在有了 文件级应用(File-based Apps),一切都变得简单了。
创建一个 Demo.cs 文件:
Console.WriteLine("Hello, C# 14!");
DateTime today = DateTime.UtcNow.Date;
Console.WriteLine($"今天是: {today:d}");
然后直接在命令行运行:
dotnet run Demo.cs
就这么简单! 再也不用创建项目文件了。
💡 小贴士:你甚至可以在文件顶部加
#r "nuget:PackageName"来引用 NuGet 包,同样不需要项目文件。
2️⃣ 扩展成员:写扩展方法更优雅了
什么是扩展方法?
扩展方法允许你为现有类型添加新方法,而无需修改原代码或创建子类。最典型的例子就是 LINQ 的 Where、Select 等方法。
以前的写法
在 C# 14 之前,写扩展方法必须这样:
public static bool ContainsAnyDigit(this string value)
{
if (string.IsNullOrEmpty(value))
return false;
return value.Any(char.IsDigit);
}
注意那个 this 关键字,每次写都很烦躁。
C# 14 的新写法
现在有了 扩展块(Extension Blocks),语法更清晰:
extension(string value)
{
public bool ContainsAnyDigit()
{
return !string.IsNullOrEmpty(value) && value.Any(char.IsDigit);
}
}
对比一下,哪个更清晰?显然是新的扩展块语法!
扩展成员的优势
- 语法更简洁:不用每次都写
this参数 - 代码更清晰:receivers 和参数一目了然
- 支持扩展属性:以前只能扩展方法,现在连属性也能扩展
3️⃣ nameof 对泛型的改进:终于不用写虚假类型了
以前的困扰
假设你想获取泛型类型 List 的名字,在 C# 14 之前必须这样写:
string name = nameof(List<int>); // 必须指定类型参数
这就很尴尬——我只是想获取类型名称,凭什么要逼我填一个类型参数?
C# 14 的改进
现在支持未绑定泛型(Unbound Generics):
// C# 14 新写法
string name1 = nameof(List<>);
string name2 = nameof(Dictionary<,>);
Console.WriteLine(name1); // 输出: List
Console.WriteLine(name2); // 输出: Dictionary
太爽了! 再也不用写那些只是为了占位的类型参数。
4️⃣ 复合赋值运算符重载:让自定义类型也能用 +=
业务场景
假设你在写一个购物车类,希望支持 += 运算符来添加商品:
ShoppingCart cart = new ShoppingCart();
cart += 5; // 添加 5 件商品
cart += 99.9m;
C# 14 的支持
C# 14 现在支持自定义复合赋值运算符:
public class ShoppingCart
{
public int TotalQuantity { get; private set; } = 0;
public decimal TotalAmount { get; private set; } = 0m;
public static ShoppingCart operator +=(ShoppingCart cart, int quantity)
{
cart.TotalQuantity += quantity;
return cart;
}
public static ShoppingCart operator +=(ShoppingCart cart, decimal amount)
{
cart.TotalAmount += amount;
return cart;
}
}
支持的运算符
C# 14 支持自定义:+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
5️⃣ 如何在项目中启用 C# 14
环境要求
- .NET 10 SDK 或更高版本
- Visual Studio 2026 或更新版本
项目配置
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<LangVersion>preview</LangVersion>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
关键点:LangVersion 设为 preview,TargetFramework 设为 net10.0
总结
C# 14 这次更新非常实用:
| 特性 | 推荐指数 |
|---|---|
| 文件级应用 | ⭐⭐⭐⭐⭐ |
| 扩展成员 | ⭐⭐⭐⭐⭐ |
| nameof 泛型 | ⭐⭐⭐⭐ |
| 复合赋值运算符 | ⭐⭐⭐⭐ |
💡 关注我,获取更多 C# 实用技巧!