C#9.0主要特性的一些想法

C# 9.0主要特性的一些想法

C# 9.0是Microsoft发布的最新版本的C#语言。本文将重点讲解C# 9.0的主要特性,包括以下内容:

  • 改进模式匹配
  • 新的init-only属性
  • 支持 Lambda 计算式中的 Discards
  • 函数成员中现在可以包含参数 null 性 注释
  • 函数和 ltc 参数中支持 调用链

改进模式匹配

模式匹配是C#的一个非常强大的特性,可以用于简化条件语句。C# 9.0进一步改进了模式匹配,现在支持以下特性:

  • 支持AND, OR,以及NOT运算符

示例:

if (a is int i and > 0) { ... }
if (a is null or string s) { ... }
if (a is not null) { ... }
  • 改进了switch表达式

现在可以用逗号分隔符对多个匹配进行分组。

string name = "Bob";
var result = name switch
{
    "Tom", "Dick", "Harry" => "Hello, guys!",
    "Maria", "Juan" => "Hola!",
    _ => "Hello!"
};
  • 引入“记录”语义

记录是一种新类型的数据结构,可以用于保存多个有关联的数据值。C# 9.0引入了这个概念。示例如下:

public record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

新的init-only属性

C# 9.0引入了一个新的init-only属性,用于指定只有构造函数或初始化器可以为该属性赋值。

示例:

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

支持 Lambda 计算式中的 Discards

Lambda 表达式是一个轻量级的匿名函数,很方便的使用,但是在以前的版本中,Lambda 计算式中的 Discards 无效,并且将会抛出一个错误。

C# 9.0中,Lambda 计算式中的 Discards 可以在代码块中使用。

示例:

List<int> list = new List<int> { 1, 2, 3, 4, 5 };
int sum = list.Sum(_ => 1);

函数成员中现在可以包含参数 null 性 注释

在以前的版本中,如果函数参数可能为 null,你可能在函数中添加一些额外的逻辑代码,使代码更加可靠。C# 9.0引入了新的 nullability 注释语法,从而使代码更加清晰地表达你的意图。

示例:

public void Foo(string? s)
{
   if (s is null) return;
   Console.WriteLine(s);
}

函数和 ltc 参数中支持 调用链

C# 9.0 引入了函数和 ltc 参数中支持 调用链特性。现在,你可以在函数调用的 API 之间定义一个点,这样可以使你的代码更加简易易读。

示例:

await httpClient.GetFromJsonAsync<Person>("https://localhost:5001/person/1")
    .WithHeader("Authorization", "Bearer " + accessToken)
    .ConfigureAwait(false);

总的来说,C# 9.0的新特性为我们的开发工作带来了更多的便利和方便。我们可以通过它们来编写更加安全、高效、易读和易维护的代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#9.0主要特性的一些想法 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#调用C++DLL传递结构体数组的终极解决方案

    下面是详细讲解“C#调用C++DLL传递结构体数组的终极解决方案”。 背景 在C#中调用C++的DLL过程中,经常会遇到需要传递结构体数组的情况。但是在传递结构体数组时,不同的编译器和不同的语言之间存在着一些细节上的差异,导致在传递结构体数组时会出现一些问题。本文将详细介绍如何解决这些问题,实现C#调用C++DLL传递结构体数组。 准备工作 在开始之前,我们…

    C# 2023年5月15日
    00
  • C# httpwebrequest访问HTTPS错误处理方法

    下面是关于C# httpwebrequest访问HTTPS错误处理方法的完整攻略。 问题描述 当使用C#中的httpwebrequest请求HTTPS的时候,可能会遇到一些安全策略上的限制,导致请求失败或者返回错误信息。例如,常见的错误信息“Could not establish trust relationship for the SSL/TLS secu…

    C# 2023年5月14日
    00
  • 使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移

    以下是使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移的完整攻略: 什么是EF Code First Entity Framework Code First是一种ORM(对象关系映射)框架,它允许开发人员使用.NET对象来定义数据库模型,而不是使用XML或其他配置文件。使用Code First,开发人员可以更轻松地创建和维护数…

    C# 2023年5月12日
    00
  • C#读取word中表格数据的方法实现

    C#读取word中表格数据的方法实现 在C#中读取Word中表格数据,可以通过Microsoft.Office.Interop.Word库中提供的API来实现。下面是具体的实现方法。 步骤一:引用Microsoft.Office.Interop.Word库 在C#项目中添加Microsoft.Office.Interop.Word库的引用,引用方法如下: 在…

    C# 2023年5月15日
    00
  • C#中Property和Attribute的区别实例详解

    当我们在使用C#编程语言进行开发时,会经常用到Property和Attribute这两个概念,它们虽然有些类似,但是在用法和作用上还是有所区别的。接下来,我将详细讲解C#中Property和Attribute的区别,包括其定义、用法、实例等内容。 Property和Attribute的定义 Property(属性)是一种C#中的成员,它可以让我们在类的外部访…

    C# 2023年5月15日
    00
  • 深入分析C# Task

    深入分析C# Task攻略 什么是C# Task? C# Task是一种异步编程模型,用于执行长时间运行的计算或I/O操作。Task API提供了执行和计划多个异步操作的方法,例如等待任务完成、等待任意完成,或等待任意取消。Task API是.NET Framework 4.5版本中Task Parallel Library (TPL)的一部分。 如何使用T…

    C# 2023年5月15日
    00
  • C# 数组删除元素的实现示例

    C# 数组删除元素的实现示例 在 C# 中,我们可以使用多种方式删除数组中的元素。本文介绍两种最常见的方法。 方法一:使用 Linq 扩展方法实现 使用 Linq 扩展方法可以优雅地实现对数组的删除操作。下面是示例代码: int[] arr = { 1, 2, 3, 4, 5 }; arr = arr.Where(x => x != 3).ToArra…

    C# 2023年6月7日
    00
  • .NET Core中RabbitMQ使用死信队列的实现

    针对“.NET Core中RabbitMQ使用死信队列的实现”这个话题,我将提供以下完整攻略步骤: 1. RabbitMQ死信队列基础概念 死信队列(Dead Letter Queue, DLQ)是一种特殊的队列,用于存储无法被消费者所处理的消息。当消息不能被正确地路由或消费者拒绝消费时,它们将会被投递到死信队列中。通常情况下,死信队列的作用是对失败的消息进…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部