C 8的新提案 new關鍵字型別推斷

2021-09-17 06:24:44 字數 974 閱讀 7152

在很多情況下,乙個地方只允許出現一種可能的型別。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() );xmlreader.create(reader, new() );
在上面的**中,xmlreadersettings類只是用於持有傳給xmlreader的選項值。我們甚至可以說xmlreadersettings的型別名稱對於它所持有的重要資訊來說有點」反客為主「了。

這個特性另乙個用武之地是不能使用var關鍵字的字段和屬性。例如:

private readonly static object s_syncobj = new();
根據提案,這個特性不能被用在四個地方。

狀態

目前,caller expression attribute被列在c# 8路線圖中,狀態為「prototype」。特性測試計畫可在github上找到。

檢視英文原文

C 8的新提案 new關鍵字型別推斷

在很多情況下,乙個地方只允許出現一種可能的型別。c 仍然要求你明確列出型別,但如果目標型別 new 表示式提案被採用,那麼就不再需要這些樣板 從表面上看,這個特性看起來與var關鍵字恰好相反。它不是根據表示式推斷出變數型別,而是從變數推斷出表示式的型別。以下是來自提案使用當前語法和建議語法的對比示例...

C 8的新提案 new關鍵字型別推斷

在很多情況下,乙個地方只允許出現一種可能的型別。c 仍然要求你明確列出型別,但如果目標型別 new 表示式提案被採用,那麼就不再需要這些樣板 從表面上看,這個特性看起來與var關鍵字恰好相反。它不是根據表示式推斷出變數型別,而是從變數推斷出表示式的型別。以下是來自提案使用當前語法和建議語法的對比示例...

C 8的新提案 new關鍵字型別推斷

在很多情況下,乙個地方只允許出現一種可能的型別。c 仍然要求你明確列出型別,但如果目標型別 new 表示式提案被採用,那麼就不再需要這些樣板 從表面上看,這個特性看起來與var關鍵字恰好相反。它不是根據表示式推斷出變數型別,而是從變數推斷出表示式的型別。以下是來自提案使用當前語法和建議語法的對比示例...