.Net

  • .net 6.0新特性 文件范围的命名空间

    前言 在前面的《隐式using指令》文章中,我们介绍了global using,可以减少我们代码文件中的“噪音”,使代码更简洁。 今天,我们介绍.NET 6中另一个简化代码的方式——文件范围的命名空间。 Demo 当我们向项目中添加一...

    2021-12-15
  • .net 6.0新特性 异步流

    前言 IAsyncEnumerable<T>支持返回异步迭代的枚举器,但在.NET 6之前,即使在API中使用了IAsyncEnumerable<T>,它还是使用同步方式输出,首先将结果缓冲到内存中,然后再写入响应中: [HttpGet] public ...

    2021-12-15 投稿
  • .net 6.0新特性 record struct

    前言 在以前的文章中,我们介绍过record类型,它具有不变性(《为什么应该用record来定义DTO》)和值相等性(《为什么应该用record来定义DTO(续)》)。 record是引用类型。而在.NET 6中,我们可以使用record struct定...

    2021-12-15 投稿
  • .net 6.0新特性 Controller支持IAsyncDisposable

    前言 在.NET中,拥有非托管资源的类通常会实现IDisposable接口,以提供一种同步释放非托管资源的机制。 但是,在某些情况下,需要提供一种异步机制来释放非托管资源,这时候可以实现IAsyncDisposable接口。 在实现此...

    2021-12-15
  • .net 6.0新特性 可空引用类型

    前言 在查看《隐式using指令》功能时,我们在csproj中发现这样一个属性: 那么,Nullable到底是干嘛的? 可为空上下文 严格来说,这不是新特性,而是C# 8.0引入的特性之一。该特性用于指示引用类型是否接受null值: ...

    2021-12-15 投稿
  • .net 6.0新特性 热重载

    前言 在以前的开发模式下,我们修改代码后必须重新编译、重新运行才能看到效果。 而热重载提供了这样一种特性,它允许你在项目正在运行时修改代码,并将代码更改立即应用于正在运行的应用程序上。 热重载的目的是尽...

    2021-12-15
  • .net 6.0新特性 隐式using指令

    前言 在使用《最小Web API》时,我们发现,相比以前的代码,大量的using指令消失了: using指令的主要作用是允许使用在命名空间中定义的类型,而无需指定该类型的完全限定命名空间。 那么,在.NET 6下为什么不需要了...

    2021-12-15 投稿
  • .net 6.0新特性 最小Web API

    前言 如果你使用过其他一些轻量级Web框架,比如Node.JS,你就会知道,创建具有最小依赖项的HTTP API是多么简单: var express = require('express') var app = express() app.get('/', function...

  • .net 6.0新特性 无需配置开发人员异常页

    前言 在.NET 6之前,我们需要在“Startup.cs”文件中手工配置开发人员异常页: if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/...

    2021-12-15
  • .net 6.0新特性 常量内插字符串

    前言 编写代码时,我们常常需要组合字符串。如下代码: string scheme = "https"; string host = "xxx.com"; int port = 8080; Console.WriteLine(string.Format("{0}://{1}:{2}", sc...

  • .net 6.0新特性 ArgumentNullException卫语句

    前言 在前面的文章中(《可空引用类型》),我们介绍过编译器会帮我们检查空引用,但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查: private void Test(WeatherForecast weatherForecast) { if (weatherFo...

  • .net 6.0新特性 DateOnly和TimeOnly类型(demo演示)

    前言 在.NET 6之前,没有方法来直接表示没有时间的日期(比如生日)或者没有日期的一天中的时间(比如闹钟)。 虽然我们可以使用DateTime类和TimeSpan类来代替,但是实际使用中会存在一些问题: var dateOnly = new ...

    2021-12-15
  • .net 6.0新特性 Nuget包验证(demo演示)

    前言 我们常常需要将.NET类库打包成Nuget包,以便多个项目公用。 一旦修改类库,尽管代码可以运行,并成功打包成新版本,看起来一切正常,但是你无法保证该更改是安全且兼容的。 而在.Net 6中,提供了包验证工具,帮...

  • .net 6.0新特性 HTTP日志记录middleware(demo演示)

    前言 在以前,通常需要我们自己编写middleware记录HTTP请求和响应。 而在.NET 6中默认就有已经实现好的middleware,添加了对HTTP日志记录的支持。 Demo 要想启用HTTP日志记录middleware十分简单: app.UseHttpLoggin...

    2021-12-15
  • .net 6.0新特性 PeriodicTimer(.NET 6新的 Timer)

    Intro .NET 6 中引入了一个新的 Timer —— System.Threading.PeriodicTimer,和之前的几个 Timer 相比一个最大的区别就是,新的 PeriodicTimer 的事件处理可以比较方便地使用异步方式,消除了使用 callback 的机制,...

    2021-12-15