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 調用該方法。
總結
以上是生活随笔為你收集整理的C#8.0,9.0,10.0常见新语法学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 40.8K star!让AI帮你读懂整个
- 下一篇: eclipse从安装到配置Tomcat及