C#8.0,9.0,10.0常见新语法学习
顶级语句
(1)一个项目最多只能有一个文件具有顶级语句,就是直接写代码,如果存在多个,则会报错,
(2)如果顶级语句和Main共存,则只调用顶级语句
(3)如果没有顶级语句,则必须有Main
简化using声明
简化using声明省去了大括号,使用“using声明”的变量是在离开变量作用域的时候,进行资源回收,但需要注意一些问题:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
using var outStream = File.OpenWrite("sample.txt");
using var writer = new StreamWriter(outStream);
writer.WriteLine("hello,tonight");
string s = File.ReadAllText("sample.txt");
Console.WriteLine(s);
由于outStream和writer在方法执行后,才被释放资源,因此,用File来ReadAllText时候,文件仍然占用,抛出“System.IO.IOException:“The process cannot access the file 'G:\CSharpLeannings\DOTNETCORE\samples\CSharp9Learn\bin\Debug\net6.0\sample.txt' because it is being used by another process.”异常
解决方法是:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
{
using var outStream = File.OpenWrite("sample.txt");
using var writer = new StreamWriter(outStream);
writer.WriteLine("hello,tonight");
}
string s = File.ReadAllText("sample.txt");
Console.WriteLine(s);
人为加一个作用域块,当outStream脱离作用域块时候,调用DisPose方法,释放资源即可。
可为空的引用类型
原因是csproj中,有:
,如果改为false,则没有该警告。
Record
异步编程
async方法中,没有await,则该方法被调用时,前面加个await,会发生什么
如果在异步方法中没有使用 await,则该方法将被视为同步方法,并且在调用它时将按照普通的同步方法进行执行,且编译器会警告。这意味着在没有 await 的情况下,方法将在执行完所有的代码后返回其结果,而不会等待任何异步操作完成。
如果在调用该方法时添加了 await,则当前线程将暂停等待该方法的执行,直到异步操作完成并返回结果。在这种情况下,使用 await 的主要目的是将异步方法的执行交还给调用方,以便调用方可以继续执行其他操作,而不需要等待异步方法完成。
需要注意的是,如果异步方法没有使用 await,则使用 await 调用该方法可能会导致死锁或阻塞线程,因为调用方线程将一直等待方法的返回,而方法本身不会执行异步操作或释放线程,这将导致线程阻塞。因此,应该仅在确保异步方法中包含异步操作的情况下使用 await 调用该方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2022-03-20 一图搞懂各种开源协议(转载)
2020-03-20 Git 中的“撤销”