- 顶级语句
- C#9.0开始,C#增加了“顶级语句”,使得可以在C#文件中编写入口代码,不在需要类和方法。
- Console.WriteLine("Hello, World!");
- 编译器自动生成Program类,并且将我们编写的代码放入该类中 顶级语句功能让编译器简化工作。
- 注意:同一个项目中只能有一个文件具有顶级语句
- 全局using指令
- 将global修饰符添加到任何using关键字前,不需要重复引入到命名控件了。
-
global using System.Text.Json;
只需在*.csproj文件中加入<ImplicitUsing>enable</ImplicitUsing>,编译器会根据项目类型自动为项目隐式添加对System.Text.Json等命名空间的引入。
- 全局using指令大大减少了项目中引入命名空间代码量。
- using 声明
- 如果类型实现了IDisposable或IAsyncDisposable接口,那么可以在变量声明前加入using关键字。这样当代码执行离开被using修饰的变量作用域的时候,变量所指向的对象的Disponse就会被调用。
-
string connStr = "数据库访问连接字符串"; using var conn = new SqlConnection(connStr); conn.Open(); using var cmd = conn.CreateCommand(); cmd.CommandText = "select * from T_Users"; using var reader = cmd.ExecuteReader(); while (reader.Read()) { } -
{ using var outStream = File.OpenWrite("e:\\1.txt"); using var writer = new StreamWriter(outStream); writer.WriteLine("hello"); }//不加入括号。会报异常。因为1.txt文件被占用。 这样操作是释放资源 string s = File.ReadAllText("e:\\1.txt"); Console.WriteLine(s);
- 记录类型
- C#中 ==运算符默认判断两个变量是否指向同一个对象
- 如果两个对象是同一种类型,并且所有属性完全相等 ,但是他们两个是属于不同对象,==比较的结果是false.则可以通过重写Equals方法来解决这个问题。
- record类型的语法,编译器会自动生成Equals方法,GetHashcode等方法
public record User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public override string ToString() { return $"编号{Id},姓名{Name},年龄{Age}"; } } User u = new User { Id = 1, Name = "zz" }; User u1 = new User { Id = 1, Name = "zz" }; User u2 = new User { Id = 2, Name = "zz1" }; Console.WriteLine(u); Console.WriteLine(u == u1); Console.WriteLine(u == u2);编译结果:

- 编译器会为record类型生成ToString()方法和Equal()方法,
C#新语法
发布时间 2023-07-07 14:26:06作者: 小溪_1