介绍
接下来我将给大家重点介绍一下.Net 6 之后的一些新的变更,文章都是来自于外国大佬的文章,我这边进行一个翻译,并加上一些自己的理解和解释。
源作者链接:https://blog.okyrylchuk.dev/twelve-csharp-11-features
正文
Required Members 替代构造函数
C# 11 required
为属性和字段引入了一个新的修饰符,以强制构造函数和调用方初始化这些值。如果用缺少的必需成员初始化对象,则会出现编译错误。
// Initializations with required properties - valid
var p1 = new Person { Name = "Oleg", Surname = "Kyrylchuk" };
Person p2 = new("Oleg", "Kyrylchuk");
// Initializations with missing required properties - compilation error
var p3 = new Person { Name = "Oleg" };
Person p4 = new();
public class Person
{
public Guid Id { get; set; } = Guid.NewGuid();
public required string Name { get; set; }
public required string Surname { get; set; }
}
如果你有多个参数化的构造函数,你应该SetsRequiredMembers在构造函数上添加属性,它初始化所有必需的成员。它通知编译器正确的构造函数。
public class Person
{
public Person() { }
[SetsRequiredMembers]
public Person(string name, string surname)
{
Name = name;
Surname = surname;
}
public Guid Id { get; set; } = Guid.NewGuid();
public required string Name { get; set; }
public required string Surname { get; set; }
}
JSON字符串文本
C# 11 引入了原始字符串文字。它允许在不转义的情况下包含任意文本。
格式至少是三个双引号”””..”””。如果您的文本包含三个双引号,则应使用四个双引号将其转义。
结合字符串插值, 的计数$表示有多少个连续的大括号开始和结束插值。在下面的例子中,我想在已经包含单大括号的 JSON 中使用插值{}。它会与字符串插值冲突,所以我用两个$$来表示双括号{{}}开始和结束插值。
string name = "Oleg", surname = "Kyrylchuk";
string jsonString =
$$"""
{
"Name": {{name}},
"Surname": {{surname}}
}
""";
Console.WriteLine(jsonString);
List Patterns
C# 11 引入了列表模式 对于某些业务处理可能有用。
它扩展了模式匹配以匹配数组或列表中的元素序列。您可以将列表模式与任何模式结合使用,包括常量、类型、属性和关系模式。
var numbers = new[] { 1, 2, 3, 4 };
// List and constant patterns
Console.WriteLine(numbers is [1, 2, 3, 4]); // True
Console.WriteLine(numbers is [1, 2, 4]); // False
// List and discard patterns
Console.WriteLine(numbers is [_, 2, _, 4]); // True
Console.WriteLine(numbers is [.., 3, _]); // True
// List and logical patterns
Console.WriteLine(numbers is [_, >= 2, _, _]); // True
字符串插值表达式中的换行符
有点像page中写C#代码
它允许 {} 之间的任何有效 C# 代码(包括换行符)以提高可读性。
在插值中使用较长的 C# 表达式(如模式匹配开关表达式或 LINQ 查询)时,它很有用。
// switch expression in string interpolation
int month = 5;
string season = $"The season is {month switch
{
1 or 2 or 12 => "winter",
> 2 and < 6 => "spring",
> 5 and < 9 => "summer",
> 8 and < 12 => "autumn",
_ => "unknown. Wrong month number",
}}.";
Console.WriteLine(season);
// The season is spring.
// LINQ query in string interpolation
int[] numbers = new int[] { 1, 2, 3, 4, 5, 6 };
string message = $"The reversed even values of {nameof(numbers)} are {string.Join(", ", numbers.Where(n => n % 2 == 0)
.Reverse())}.";
Console.WriteLine(message);
// The reversed even values of numbers are 6, 4, 2.
结语
联系作者:加群:867095512 @MrChuJiu
原文地址:http://www.cnblogs.com/MrChuJiu/p/16924393.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性