當前位置:
首頁 > 最新 > C#7.1先睹為快

C#7.1先睹為快

自2003年以來,Microsoft首次考慮對C#使用帶小數點後位數的版本。當前暫定下一個版本是C# 7.1,其中有望包括:非同步Main函數(Async Main)、默認表達式(Default Expression)、推導元組名(Infer Tuple Names)和使用泛型的模式匹配(Pattern-matching with Generics)等。

非同步Main函數

最讓測試非同步代碼的開發人員沮喪的,無疑是控制台應用當前不支持非同步入口點(EntryPoint)。雖然變通方法是編寫多行樣板代碼,但是這樣的模式依賴於對方法的非正常使用,難於理解。例如:

ublic static void Main() { MainAsync().GetAwaiter().GetResult(); } private static async Task MainAsync() { ... // 程序主代碼。 }

為解決這個問題,在「非同步Main函數建議」中,添加了如下四個新的函數簽名,羅列了可能的入口點。

static Task Main() static TaskMain() static Task Main(string[]) static TaskMain(string[])

如果代碼中不存在另一個非非同步Main函數,那麼只要給出一個上述的入口點函數,編譯器就會生成所需的樣板代碼。唯一的限制是需要向後兼容。

Microsoft曾考慮允許「async void Main()」,但是這種做法會使編譯器更複雜,並且Microsoft總體上並不鼓勵在事件處理器之外使用「async void」。

默認值(即Nothing)

VB沒有表示「null」的關鍵字,這是C#和VB間的一個微妙的差別。但是VB有一個關鍵字「Nothing」。在語言技術規範中,對該關鍵字給出了如下說明:

Nothing是一個特殊的常值。它沒有類型,可轉換為類型系統中的任意類型,也包括類型參數。在轉換為某個特定類型後,它等價於該類型的默認值。

C#當前使用「default(T)」模式實現同一效果,但略為繁瑣,尤其是類的名字很長時。C# 7.1中將提供一個「默認常值」(Default Literal),其描述為:

這一類型的表達式可通過常值轉換為默認值或null值,隱式地轉換為any類型。

該類型向默認常值的推理與向null常值推理的工作機制一樣,除非允許any類型(不只是引用類型)。

在可以使用null的地方,通常也可以使用默認常值。這一做法被看成是C#建議中的一個倒退,可能因為人們通常會對兩個非常類似的方法完成同一件事大皺眉頭。在設計會議紀要中,就有人提出疑問:

我們是否正在挑起類型之爭?

一個使用默認常值的例子如下:

ImmutableArrayx = default; return default; void Method(ImmutableArrayarrayOpt = default) var x = new[] { default, ImmutableArray.Create(y) }; const int x = default; if (x == default) if (x is default) y = default as RefType //編譯器告警:總是null。 int i = default

下面例子給出的是對默認常值的非法使用:

const int? y = default; if (default == default) if (default is T) var i = default throw default

後者無疑是一個C#設計上的奇特構件。在設計會議紀要中,給出了如下說法:

在C#中,允許開發人員拋出null。這會引發一個運行時錯誤,進而導致拋出一個NullReferenceException異常。因此,拋出NullReferenceException並非正大光明的,而是一種醜陋的模式。

完全沒有理由允許拋出默認值。我們並不認為用戶會感覺這是可行的,或是了解它的工作機制。

在C#中,開發人員可能常會有這樣的一個疑問:「null是否表示的是實際的空值,或是表示了可能為空值也可能不為空值的默認值?」我們認為,這是一個令人非常困惑的問題。

在本文的第二部分中,我們將介紹元組和模式匹配。

查看英文原文:An Early Look at C# 7.1: Part 1

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 推酷 的精彩文章:

國內Foscam製造的IP攝像頭被曝出大量漏洞
動態添加Redis密碼認證
史玉柱、雷軍是如何從定位理論中找到營銷爆點的?
開發者分享如何與媒介合作進行恰當的產品營銷
JavaScript 起步:「new」 運算符-Hacker Noon

TAG:推酷 |

您可能感興趣

智能計算@2019MWC上海,先睹為快
先睹為快「蘇30MKK」
先睹為快,各家「非公版」RTX 2080 Ti、RTX 2080顯卡搶先看
TCL CES2019全球新品發布先睹為快:8K電視備受矚目
先睹為快19年後,2037年的超級月亮
遇見美好未來,2018 MWC上海精彩亮點先睹為快
Photoshop CC 2019昨天發布!13個新功能先睹為快,附贈軟體下載地址!
大會嘉賓2.0版先睹為快
不花錢享用MS Office 2019 先睹為快:MS Office 2019加了哪些料
Pre-SIHH 2019先睹為快 這些新表你必須了解
2019充電樁產業鏈全盤點,先睹為快
2018夏季流行的4大美甲風格 先睹為快!
2018年ChinaJoy新聞發布會召開 六大亮點先睹為快
2017MPA世界手機攝影大賽獎項公開,先睹為快!
先睹為快,New Balance 新一代 990v5 跑鞋
預計2019年票房大賣的電影!快來先睹為快吧
先睹為快!330米珠澳地標俯瞰橫琴澳門,99%的人沒見過!
阿卡丁AKPLAYER亮相2018CJ 獨立展台亮點先睹為快!
先睹為快!Nike Air Max 720 又一全新配色
2030年服役!美國曝光六代機設計理念,4大優勢先睹為快