首页 > 编程语言 >C# 11 讲解一

C# 11 讲解一

时间:2022-11-25 10:45:24浏览次数:58  
标签:11 Console string C# Person numbers 讲解 public

介绍

接下来我将给大家重点介绍一下.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

公众号

标签:11,Console,string,C#,Person,numbers,讲解,public
From: https://www.cnblogs.com/MrChuJiu/p/16924393.html

相关文章

  • webpack练习中的坑
    记录下在练习搭建webpack中遇到的问题。1,今天照着B站学习时,发现同样的代码我本地运行报错如下TypeError:ClassconstructorServeCommandcannotbeinvokedwithout......
  • Jmeter简单并发及压测--JDBC Request
    一般需要并发测试的接口大多是登录、下单等接口。尤其需要抢购的下单接口。下面做的就是下单并发测试,由于用户需要用到微信号注册,所以不从注册后获取用户,直接在数据库里插......
  • 数据湖三剑客:Hudi vs Delta Lake vs Iceberg
    前言随着Lakehouse的日益普及,人们对分析和比较作为该数据架构核心的开源项目的兴趣日益浓厚:ApacheHudi、DeltaLake和ApacheIceberg。目前发表的大多数比较文章似乎仅......
  • 设置console打印样式
    在浏览器中:可以通过第一个参数加入%c来设置,第二个参数传css字符串  在node.js中Node的实现,是基于c语言的,因此Node的彩色打印其实与c语言类似\33[0m关闭所有属性......
  • Selenium4+Python3系列(八) - Cookie、截图、单选框及复选框处理、富文本框、日历控件操
    我所在的城市昨天出了近20+的阳性案例,但这丝毫没有“影响”到996的工作时间,当然,也没有影响到我想继续更新文章的决心。一、cookie常用操作入门上一篇有写过关于cookie的......
  • STM32CubeMX之外部中断
    STM32CubeMX之外部中断1.中断简介​​   中断,是指处理机处理程序运行中出现的紧急事件的整个过程。程序运行过程中,系统外部、系统内部或者现行程序本身若出现紧急事件......
  • C++ 宏的一个高级用法---定义函数
    #pragmaonce//利用宏声明方法利用该宏#defineDECLARE_TEST_METHOD(_T)\ _TTest##_T(_T&);\ _TTest##_T##1(_T&);classDemo{public://声明int......
  • 微服务之注册中心nacos
    Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。下载nacos压缩包,详情请见于nacos官方网站  https://nacos.io/zh......
  • centos7使用cgroup对user进行资源限制
    1.概述本篇介绍在centos7.9(4核1G虚拟机)上使用cgroup对user的资源(cpu,memory)进行限制,达到对普通用户的资源利用限制跟root资源限制生效且效果不同。适用于多用户登陆节......
  • 3.3 Docker最新入门教程-Docker入门-更新应用程序
    3.3更新应用程序在第2部分中,您容器化了一个待办事项应用程序。在这一部分中,您将更新应用程序和容器镜像。您还将学习如何停止和删除容器。更新源代码在下面的步骤中,......