Below you will find pages that utilize the taxonomy term “CSharp 8.0”
Posts
'C# 8.0 - Static local functions'
C# 8.0 開始支援靜態的 Local functions,只要直接在 Local functions 前面加掛 static 關鍵字即可。
using System; namespace StaticLocalFunctions { class Program { static void Main(string[] args) { static void SayHello(string name) => Console.WriteLine(string.Format("Hello~{0}", name)); //static void SayHello(string name) //{ // Console.WriteLine(string.Format("Hello~{0}", name)); //} SayHello("Larry"); } } } Static Local functions 在使用上跟一般的靜態方法一樣,需要使用的資料需從參數傳入,或是直接使用靜態的變數值,如果直使用 static Local functions 外的區域變數編譯器會報錯。
using System; namespace StaticLocalFunctions { class Program { static void Main(string[] args) { var name = "Larry"; static void SayHello() => Console.
read morePosts
'C# 8.0 - Indices and ranges'
C# 8.0 提供了 Index 與 Range。
要取得陣列指定位置的元素本來需要帶入 int 型態的索引位置到索引子,現在可改帶入 Index,Index 的數值表示寫法跟一般的整數數值類似,只是從尾部倒過來的索引可直接在前面加上 ^ 符號表示,像是最後一筆資料的索引位置可用 ^1 表示,比起以前自己要用陣列長度推算方便了許多。
... var lastData = data[^1]; ... 除了上面類似數值的表示方式外,也可以直接使用 Index 類別來撰寫。
... var firstData = data[Index.Start]; var secondData = data[Index.FromStart(1)]; //var secondData = data[new Index(1)]; var lastData = data[Index.FromEnd(1)]; //var secondData = data[new Index(1, true)]; ... 完整的範例會像下面這樣:
using System; using System.Linq; namespace Indices { class Program { static void Main(string[] args) { var data = Enumerable.Range(1, 5).ToArray(); //var firstData = data[0]; //var secondData = data[1]; //var lastData = data[^1]; var firstData = data[Index.
read morePosts
'C# 8.0 - Using declarations'
C# 8.0 以前使用 using 釋放物件,會在 using 後用小刮號包住要釋放的物件,然後在下面用大括號指示物件的生命週期範圍。
... using(var obj = new DisposableClass()) { ... } ... 程式寫起來會像下面這樣:
using System; namespace UsingDeclarations { class Program { static void Main(string[] args) { using (var obj = new DisposableClass()) { Console.WriteLine(obj.ToString()); } } } class DisposableClass : IDisposable { public void Dispose() { Console.WriteLine("Dispose..."); } } } C# 8.0 後支援 Using declarations,可以直接在變數宣告前面加掛 using 關鍵字,一樣可以達到物件釋放的效果。
... using var obj = new DisposableClass(); ... 程式寫起來會像下面這樣:
read morePosts
'C# 8.0 - Target-typed new-expressions'
C# 8.0 的 Target-typed new-expressions 能讓開發人員在使用 new 關鍵字建立物件實體時省略帶入型別,編譯器編譯時會依照 Context 幫我們帶入。
以簡單的例子來說,假設已經宣告了變數 p 型別為 Point,那在用 new 關鍵字建立實體時就可以省略帶入 Point。
... Point p = new (1, 2); 反組譯看可以看到編譯器會幫我們在 new 關鍵字後面帶入正確的型別。
複雜一點的情境像是陣列元素的宣告也是支援。
... Point[] ps = { new (1, 2), new (2, 2) };
read more