C# 8.0與.NET Core 3.0一起釋出,這兩個版本在.NET Conf 2019中同時釋出。
作為C# 8.0的一部分,有很多新特性發布了,這裡我挑出了前五名。
只讀成員(Readonly members)我們已經使用readonly變數很長一段時間了,有以下的一些優點:
類或結構不可變。物件在預設情況下是執行緒安全的狀態不能被修改,這意味著與哪個執行緒使用物件無關現在我們可以對結構體的任何成員應用readonly修飾符,這對於struct來說意義重大,因為它是一個值型別。
使用(Usage)
public struct Employee { public string FirstName { readonly get; set; } public string SecondName { readonly get; set; } public readonly string Name => $ "{FirstName} {SecondName}"; }
使用宣告(Using Declaration)使用宣告有一個很酷的快捷方式,因為它消除了使用花括號的程式碼塊。
而不是這樣寫:
public void GetEmployeeDetails(int employeeID) { using(var conn = new SqlConnection("connectionstring")) { //code for retrieving the employee details. //Connection will be disposed here as its internally a try- catch-finally block } }
現在我們可以這樣寫:
public void GetEmployeeDetails(int employeeID) { using var conn = new SqlConnection("connectionstring"); //code for retrieving the employee details. //Connection will be disposed }
預設的介面方法(Default Interface Method)現在我們可以將預設方法新增到介面中。其思想是,我們可以在以後使用預設實現向介面新增方法,這樣現有的實現就不會失敗。我喜歡這個想法,但我不確定這個功能會有多有用,也不確定它會帶來多少困惑,它是Scala等其他語言中的內聯特徵。
使用(Usage)
//AsynEnumberable usage public static async IAsyncEnumerable < string > GenerateRandomValues() { Random rnd = new Random(); for (int i = 0; i < 20; i++) { await Task.Delay(1000); yield return $ "A-{rnd.Next(1000)}"; } }
非同步流(Asynchronous streams)在我看來,這是最令人興奮的特性之一。到目前為止,我們只返回IEnumerable,這很有用,因為我們可以在IEnumerable上編寫LINQ查詢。現在我們可以非同步地建立和使用流了。
使用(Usage)
await foreach(var n in GenerateRandomValues()) { Console.WriteLine($ "Random Value : {n}"); }
如下所示呼叫此方法,
await foreach(var n in GenerateRandomValues()) { Console.WriteLine($ "Random Value : {n}"); }
屬性模式(Property Pattern)
這絕對是我最喜歡的功能之一,能夠匹配屬性是無價的,語法也非常簡單。讓我們看看下面的例子。
public static string GetFamilyName(Employee employee) => employee switch { { FirstName: "Prasad" } => "Pulickal", { FirstName: "Pradeep" } => "Thekkeveli", { FirstName: "Praveen" } => "PuthanMadam", _ => "Not Available" };
請看一下switch的語法,這裡“switch”在變數地址後面。在這個例子中,如果員工的名字是“Prasad”,那麼他的姓就是“Pulickal”,以此類推。除此之外,他們的姓氏也將“暫不公開”。這裡的任何東西都用下劃線(_)表示,我相信這在所有語言的模式匹配中都是相當標準的。
最新評論