在許多情況下,在給定的位置只能是確定的型別。但是c#卻要求顯示的列出型別名稱。如果target-typed new表示式的建議被採納,像這樣的模板**將不再需要。
表面上看,這個特徵跟var關鍵字相反。但是它不是從表示式中推斷變數型別,而是從變數中推斷表示式的型別。下面分別是使用當前語法及建議語法的例子。
//當前語法
dictionary> field = new dictionary>();
//建議語法
dictionary> field = new();
像你看到的一樣,當c#能夠根據上下文推斷出型別時,就不需要再詳細制定型別了。對於區域性變數,它並不是很有趣。它更能在臨時引數的場景下發揮作用。
//當前寫法
xmlreader.create(reader, new xmlreadersettings() );
//建議寫法
xmlreader.create(reader, new() );
再上面的**中,類xmlreadersettings並不是很有趣。它只不過是為了將選項值賦值給xmlreader。甚至有人認為xmlreadersettings的出現能讓我們忽視真正重要的資訊。
在var關鍵字並不適用的場景下,比如欄位和屬性,這個特徵比較有用。
privatereadonly
static
object s_syncobj = new();
根據這項建議,如下四種場景不適合使用。
目前,呼叫者表示式屬性在c# 8路線圖中以狀態「prototype」列出。特性測試計畫在github上可用。
本文翻譯自:c# 8: type inference for the new keyword
C 關鍵字new學習
很多新手對c 關鍵字new可能不是很了解吧,今天我一起來學習一下。new 是c 的乙個關鍵字,同時也是操作符。關於new的話題非常多,因為它確實比較複雜,也非常神秘,下面我將把我了解到的與new有關的內容做乙個總結。new的過程 當我們使用關鍵字new在堆上動態建立乙個物件時,它實際上做了三件事 獲...
C 8的新提案 new關鍵字型別推斷
在很多情況下,乙個地方只允許出現一種可能的型別。c 仍然要求你明確列出型別,但如果目標型別 new 表示式提案被採用,那麼就不再需要這些樣板 從表面上看,這個特性看起來與var關鍵字恰好相反。它不是根據表示式推斷出變數型別,而是從變數推斷出表示式的型別。以下是來自提案使用當前語法和建議語法的對比示例...
C 8的新提案 new關鍵字型別推斷
在很多情況下,乙個地方只允許出現一種可能的型別。c 仍然要求你明確列出型別,但如果目標型別 new 表示式提案被採用,那麼就不再需要這些樣板 從表面上看,這個特性看起來與var關鍵字恰好相反。它不是根據表示式推斷出變數型別,而是從變數推斷出表示式的型別。以下是來自提案使用當前語法和建議語法的對比示例...