Build 2018大會:C#的未來

weixin_34319999發表於2018-05-28
\

看新聞很累?看技術新聞更累?試試下載InfoQ手機客戶端,每天上下班路上聽新聞,有趣還有料!

\
\\

在C#的未來特性清單上,排在第一位的是可空引用型別。我們第一次報導這個特性是在去年,這裡我們簡要的回顧一下:所有的引用變數、引數和欄位預設都是非空的。然後,和值型別一樣,如果你希望它們可以為空,你就必須在型別名上加一個問號(?)來顯式說明。

\\

這會是一項可選特性,目前的想法是,對於將升級到C# 8的現有專案,可空引用型別特性是關閉的。對於新專案,微軟傾向於預設開啟這項特性。

\\

警告會進一步分成潛在錯誤和表面警告。例如,如果p.MiddleName是一個string?,那麼下面這行程式碼會是一個表面警告:

\\
string middleName = p.MiddleName;\
\\

由於危險只會出現在值解引用的時候,所以這種對區域性變數的賦值並不是一個真正的問題。因此,你可以在遺留程式碼上禁用這個警告,以減少誤報數量。

\\

同樣,早於這項特性的庫也不會觸發警告,因為編譯器不知道一個指定的引數是否應該視為可空的。

\\

GitHub上提供了可空引用型別的預覽

\\

Switch表示式

\\

Switch塊通常用於簡單地返回單個值。在這個常見的場景中,其語法比實際完成的工作要複雜得多。考慮下下面這個使用模式匹配的例子:

\\
static string M(Person person)\{\    switch (person)\    {\        case Professor p:\            return $\"Dr. {p.LastName}\";\            case Studen s:\                return $\"{s.FirstName} {s.LastName} ({s.Level})\";\        default:\            return $\"{person.FirstName} {person.LastName}\";\    }\}\
\\

在新的提案中,反覆出現的case和return語句可以省掉,其結果是下面這種更新、更緊湊的語法:

\\
static string M(Person person)\{\    return person switch\    {\        Professor p =\u0026gt; $\"Dr. {p.LastName}\

相關文章