C#每推出一个版本都有比较特别新特征,本文盘点在C# 9中比较有价值的3个新特征。
1、Records
Records是C# 9引入的一种新的引用类型,它简化了不可变数据类型的定义和使用。Records自动为属性生成相等性比较、哈希码计算和ToString()方法等常用方法,还支持结构化的模式匹配和解构赋值。Records使得处理不可变数据更加方便,可以减少样板代码,提高代码的可读性和可维护性。
示例代码:
public record Person(string UserName, int Age);
var person1 = new Person("赵云", 1000);
var person2 = new Person("赵云", 1000);
Console.WriteLine(person1 == person2); // 输出: True
var updatedPerson = person1 with { UserName= "刘备" };
Console.WriteLine(updatedPerson.UserName); // 输出: 刘备
2. 改进的模式匹配
C# 9扩展了模式匹配功能,使得在代码中进行条件判断和类型匹配更加简洁和直观。新的模式匹配语法和模式匹配表达式提供了更灵活的匹配模式和模式组合,包括逻辑或(|)和逻辑与(&)操作符,以及递归模式等。改进的模式匹配使得处理复杂的条件逻辑变得更加简单和清晰。
//案例1
public static bool IsLetter(this char c) =>
c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
//案例2 使用可选的括号来明确 and 的优先级高于 or
public static bool IsLetterOrSeparator(this char c) =>
c is (>= 'a' and <= 'z') or (>= 'A' and <= 'Z') or '.' or ',';
//案例3 最常见的用途之一是用于 NULL 检查的新语法
if (e is not null)
{
// ...
}
3. Init-only 属性
引入了init-only属性,它允许在对象创建后设置属性的初始值,并在之后禁止对其进行修改。这对于不可变对象和初始化过程中的属性验证非常有用。通过init关键字将属性标记为只能在对象初始化期间设置,可以提高代码的安全性和可读性,避免了不必要的属性修改。
public class Person
{
public string UserName { get; init; }
public string Age{ get; init; }
}
var person = new Person {UserName = "纪晓岚", Age= 200 };
// person.UserName= "和珅"; // 编译错误,属性只能在对象初始化期间设置
Console.WriteLine($"Full Name: {person.UserName } {person.Age}");
结语
这三个特征都有助于简化代码编写、提高开发效率,并提供更强大的模式匹配和数据处理能力。它们可以减少冗余的样板代码,改善代码的可读性和可维护性,同时也为开发人员提供更多的语言工具来处理复杂的数据结构和条件逻辑。希望本文对大家有帮助,欢迎大家留言和吐槽。
参考:微软官方文档
推荐阅读: SignalR+Hangfire 实现后台任务队列和实时通讯 .NET 7+SignalR+Hangfire实现后台任务队列和实时通讯 C# 中如何计算一个实例占用多少内存? 如何让Task在非线程池线程中执行? 宇宙神器.NET 8 Preview 4 发布 .NET如何避免让线程摸鱼,请用异步技术 async await 拿捏他~ 点击下方卡片关注DotNet NB
一起交流学习
▲ 点击上方卡片关注DotNet NB,一起交流学习
请在公众号后台
回复 【路线图】获取.NET 2023开发者路线图 回复 【原创内容】获取公众号原创内容 回复 【峰会视频】获取.NET Conf开发者大会视频 回复 【个人简介】获取作者个人简介 回复 【年终总结】获取作者年终总结 回复 【加群】加入DotNet NB 交流学习群 长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。