C#6語法小計

竹林聽雨行發表於2019-12-31

Null 條件運算子

Null 條件運算子使 null 檢查更輕鬆、更流暢 。 將成員訪問 . 替換為 ?.:

C#複製

var first = person?.FirstName; 
複製程式碼

在前面的示例中,如果 Person 物件是 null,則將變數 first 賦值為 null。 否則,將 FirstName 屬性的值分配給該變數。 最重要的是,?. 意味著當 person 變數為 null 時,此行程式碼不會生成 NullReferenceException。 它會短路並返回 null。 還可以將 null 條件運算子用於陣列或索引器訪問。 將索引表示式中的 [] 替換為 ?[]。

無論 person 的值是什麼,以下表示式均返回 string。 通常,將此構造與“null 合併”運算子一起使用,以在其中一個屬性為 null 時分配預設值 。 表示式短路時,鍵入返回的 null 值以匹配整個表示式。

C#複製

first = person?.FirstName ?? "Unspecified";
複製程式碼

還可以將 ?. 用於有條件地呼叫方法。 具有 null 條件運算子的成員函式的最常見用法是用於安全地呼叫可能為 null 的委託(或事件處理程式)。 通過使用 ?. 運算子呼叫該委託的 Invoke 方法來訪問成員。 可以在委託模式一文中看到示例。

?. 運算子的規則確保運算子的左側僅計算一次。 它支援許多語法,包括使用事件處理程式的以下示例:

C#複製

// preferred in C# 6:
this.SomethingHappened?.Invoke(this, eventArgs);
複製程式碼

確保左側只計算一次,這使得你可以在 ?. 的左側使用任何表示式(包括方法呼叫)

字串內插

使用 C# 6,新的字串內插功能可以在字串中嵌入表示式。 使用 $ 作為字串的開頭,並使用 {和 } 之間的表示式代替序號:

C#複製

public string FullName => $"{FirstName} {LastName}";
複製程式碼

本示例使用替代表示式的屬性。 可以使用任何表示式。 例如,可以在內插過程中計算學生的成績平均值:

C#複製

public string GetGradePointPercentage() =>
    $"Name: {LastName}, {FirstName}. G.P.A: {Grades.Average():F2}";
複製程式碼

上一行程式碼將 Grades.Average() 的值格式設定為具有兩位小數的浮點數。

Expression-bodied 函式成員

你編寫的許多成員是可以作為單個表示式的單個語句。 改為編寫 expression-bodied 成員。 這適用於方法和只讀屬性。 例如,重寫 ToString() 通常是理想之選:

C#複製

public override string ToString() => $"{LastName}, {FirstName}";
複製程式碼

也可以將此語法用於只讀屬性:

C#複製

public string FullName => $"{FirstName} {LastName}";
複製程式碼

將現有成員更改為 expression bodied 成員是二進位制相容的更改。

相關文章