Skip to content

效率提高.新特性

与此主题相关的项目

  • Record 1、C#中的==运算符默认是判断两个变量指向的是否是同一个对象,即使两个对象内容完全一样,也不相等。可以通过重写Equals方法、重写==运算符等来解决这个问题,不过需要开发人员编写非常多的额外代码。

    2、在C#9.0中增加了记录(record)类型的语法,编译器会为我们自动生成Equals、GetHashcode等方法。 public record Person(string FirstName, string LastName); 3、Person p1 = new Person("Yang", "Zack");      Person p2 = new Person("Yang","Zack");      Person p3 = new Person("Gates", "Bill");      Console.WriteLine(p1);      Console.WriteLine(p1==p2);      Console.WriteLine(p1==p3);      Console.WriteLine(p1.FirstName); 4、通过反编译查看record的内幕。

    source generator

    1、把以前需要在运行期需要进行Emit代码生成的工作放到编译器,提升程序的运行时性能。比如EF Core中代理子类的生成,Dapper的优化、正则表达式的优化、AutoMapper的优化等。

    2、比Emit更加的对NativeAOT友好。 3、案例 E:\主同步盘\我的坚果云\读书笔记及我的文章\技术学习笔记\SourceGenerator\AutoMapper2 4、业务系统的用途:根据数据字典等业务文件生成代码。 5、技术详细讲解,搜索《杨中科 会写代码的代码-Source Generator》元组

    元组

    (char Xing,string Ming)ParseName(string name)

    {     char xing = name[0];     string ming = name.Substring(1);     return (xing, ming); } (char xing, string ming) = ParseName("杨中科"); Console.WriteLine($"姓{xing},名{ming}"); 分析原理

    解构 自定义类用类似上面的元组的赋值效果。类可以定义一个Deconstruct方法,然后返回值用out参数定义。

    record Color(byte Red,byte Green,byte Blue) { public void Deconstruct(out byte red,out byte green,out byte blue) { red = Red; green = Green; blue = Blue; } }

    顶级语句 1、直接在C#文件中直接编写入口方法的代码,不用类,不用Main。经典写法仍然支持。反编译一下了解真相。

    2、顶级语句中可以直接使用await语法,也可以声明函数

    可空引用类型

    1、csproj中<Nullable>enable</Nullable>启用可空引用类型检查。

    2、在引用类型后添加“?”修饰符来声明这个类型是可空的。对于没有添加“?”修饰符的引用类型的变量,如果编译器发现存在为这个变量赋值null的可能性的时候,编译器会给出警告信息。

    Minimal API

    让ASP.NET Core项目更简单。

    WebApplication.Create()返回的WebApplication类型中有Configuration等类型,而且实现了IApplicationBuilder接口,因此可以兼容旧版ASP.NET Core中的用法。

    更新于
    更新于