C# 8的新提案:new关键字类型推断
在很多情況下,一個地方只允許出現一種可能的類型。C#仍然要求你明確列出類型,但如果目標類型“new”表達式提案被采用,那么就不再需要這些樣板代碼。
從表面上看,這個特性看起來與var關鍵字恰好相反。它不是根據表達式推斷出變量類型,而是從變量推斷出表達式的類型。以下是來自提案使用當前語法和建議語法的對比示例。
Dictionary\u0026lt;string, List\u0026lt;int\u0026gt;\u0026gt; field = new Dictionary\u0026lt;string, List\u0026lt;int\u0026gt;\u0026gt;();Dictionary\u0026lt;string, List\u0026lt;int\u0026gt;\u0026gt; field = new();正如你所看到的,當它能夠從上下文中推斷出類型時,就不需要指定類型。對于局部變量可能沒有太大用處,但對于臨時參數來說卻很方便。
XmlReader.Create(reader, new XmlReaderSettings() { IgnoreWhitespace = true });XmlReader.Create(reader, new() { IgnoreWhitespace = true });在上面的代碼中,XmlReaderSettings類只是用于持有傳給XmlReader的選項值。我們甚至可以說XmlReaderSettings的類型名稱對于它所持有的重要信息來說有點”反客為主“了。
這個特性另一個用武之地是不能使用var關鍵字的字段和屬性。例如:
private readonly static object s_syncObj = new();根據提案,這個特性不能被用在四個地方。
枚舉類型:并非所有枚舉類型都包含常量零,因此應該使用顯式枚舉成員。
接口類型:這是一個利基特性,最好要明確指定類型。
數組類型:數組需要特殊的語法來表示長度。
結構體默認構造函數:它排除了所有基本類型和大多數值類型。如果你想使用這個類型的默認值,可以自己寫。
狀態
目前,Caller Expression Attribute被列在C# 8路線圖中,狀態為“Prototype”。特性測試計劃可在GitHub上找到。
查看英文原文:https://www.infoq.com/news/2019/01/c-sharp-targeted-type-new
總結
以上是生活随笔為你收集整理的C# 8的新提案:new关键字类型推断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux每日命令(27):chmod命
- 下一篇: 【译】如何停止使用console.log