.NET Core 3 Preview 2新功能概覽

自從微軟宣布.NET Core 3一來校套,我就一直期待著它早日發(fā)布纯续。最近幾天.NET Core 3 的第二個預(yù)覽版也放出來了,由于是預(yù)覽版羽莺,暫時還不能用于生產(chǎn)環(huán)境实昨,所以我也就不找下載連接了。不過新功能還是要看一看的盐固,免得到時候正式版出來一臉懵逼荒给。

C# 8

其中最亮眼的自然是C#了,作為.NET平臺的親兒子刁卜,C#的發(fā)展也一直受到各種關(guān)注志电。本次C# 8也到來了,自然各種新功能和好吃的語法糖是少不了的蛔趴。

using聲明

第一個新語法是using聲明溪北。原來使用C#自動管理資源的時候,必須using語句夺脾,然后在大括號語句塊內(nèi)進(jìn)行操作之拨,using作用域結(jié)束后使用的資源會自動釋放。在Java等語言中也有類似做法咧叭。

        static void Main()
        {
            var filename = "Program.cs";
            var line = string.Empty;
            var magicString = "magicString";
            var file = new FileInfo(filename);
            // using作用域結(jié)束后reader自動釋放
            using (var reader = file.OpenText())
            {
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains(magicString))
                    {
                        WriteLine("Found string");
                        return;
                    }
                }
                WriteLine("String not found");
            }
        }

現(xiàn)在使用using聲明可以省去大括號作用域蚀乔,讓代碼塊減少一層縮進(jìn),也能讓你少打一對大括號菲茬。using聲明的資源在作用域結(jié)束后會自動釋放吉挣。

        static void Main()
        {
            var filename = "Program.cs";
            var line = string.Empty;
            var magicString = "magicString";
            var file = new FileInfo(filename);
            // 改用using聲明
            using var reader = file.OpenText();
            while ((line = reader.ReadLine()) != null)
            {
                if (line.Contains(magicString))
                {
                    WriteLine("Found string");
                    return;
                }
            }
            WriteLine("String not found");
        } // reader會在作用域結(jié)束后自動釋放

switch表達(dá)式

第二個新語法是switch表達(dá)式。C# 7引入了is表達(dá)式和switch語句的模式匹配婉弹,現(xiàn)在C# 8引入了switch表達(dá)式睬魂,同樣也支持模式匹配。這個語法比較奇怪镀赌,所以大家第一次看到的時候可能不適應(yīng)氯哮,不過這就和lambda表達(dá)式一樣,一旦習(xí)慣了商佛,用起來就很舒服了喉钢。

簡單來說switch表達(dá)式是一個表達(dá)式,所以它的結(jié)果是一個值良姆,而且它是一個中綴表達(dá)式肠虽,所以左邊和右邊都有操作數(shù)。switch表達(dá)式左邊的操作數(shù)是要測試條件的對象玛追,右邊則是大括號包裹的税课,以逗號分隔的匹配列表闲延。說起來有點麻煩,直接看官方的例子好了韩玩。

static string Display(object o) => o switch
{
 Point { X: 0, Y: 0 } => "origin",
 Point { X: var x, Y: var y } => $"({x}, {y})",
 _ => "unknown"
};

首先這是一個函數(shù)慨代,使用了之前C#新增的語法,表達(dá)式體函數(shù)啸如,如果一個函數(shù)直接返回一個表達(dá)式,那么就可以用箭頭=>直接替換原來的方法體氮惯。重點在于第一個箭頭后面的switch叮雳,這是一個switch表達(dá)式,o就是要測試的值妇汗,switch右面的花括號里面就是匹配列表帘不,如果o的值是(0,0)的點,就返回"origin"字符串杨箭;如果是一個普通的點寞焙,就打印該點的坐標(biāo);如果是其他情況互婿,就返回"unknown"捣郊,這里的下劃線_相當(dāng)于switch語句的default。

如果你理解了這個例子慈参,官方有給了一個更加復(fù)雜的例子呛牲,這次還帶了元組解構(gòu)的語法⊥耘洌可以看到娘扩,如果沒有switch表達(dá)式以及模式匹配,要實現(xiàn)相同的功能很明顯需要很多冗長的代碼壮锻。

static State ChangeState(State current, Transition transition, bool hasKey) =>
 (current, transition) switch
 {
 (Opened, Close) => Closed,
 (Closed, Open) => Opened,
 (Closed, Lock) when hasKey => Locked,
 (Locked, Unlock) when hasKey => Closed,
 _ => throw new InvalidOperationException($"Invalid transition")
};

異步流

接下來一個比較重要的改進(jìn)是異步流琐旁。不過官方?jīng)]有多提,估計等到比較穩(wěn)定的時候會詳細(xì)介紹猜绣。

IEEE浮點數(shù)改進(jìn)

浮點數(shù)系統(tǒng)也根據(jù)IEEE 754-2008修訂版進(jìn)行了改進(jìn)以遵循規(guī)定灰殴。還增加了一下一些數(shù)學(xué)API:

  • BitIncrement/BitDecrement
  • MaxMagnitude/MinMagnitude
  • ILogB
  • ScaleB
  • Log2
  • FusedMultiplyAdd
  • CopySign

內(nèi)置JSON Writer和Json Document

現(xiàn)在.NET Core內(nèi)置了JSON Writer和Json Document類,方便大家使用掰邢。該類按照官方博客稱比Json.NET快30%-80%验懊,不過由于內(nèi)置的JSON類偏底層一些,平時大家用的肯定還是Json.NET尸变,不過如果你想自己做一些功能义图,就可以利用官方的底層類來實現(xiàn)。

下面是官方的一個實例:

static int WriteJson(IBufferWriter<byte> output, long[] extraData)
{
 var json = new Utf8JsonWriter(output, state: default);
 json.WriteStartObject();
 json.WriteNumber("age", 15, escape: false);
 json.WriteString("date", DateTime.Now);
 json.WriteString("first", "John");
 json.WriteString("last", "Smith");
 json.WriteStartArray("phoneNumbers", escape: false);
 json.WriteStringValue("425-000-1212", escape: false);
 json.WriteStringValue("425-000-1213");
 json.WriteEndArray();
 json.WriteStartObject("address");
 json.WriteString("street", "1 Microsoft Way");
 json.WriteString("city", "Redmond");
 json.WriteNumber("zip", 98052);
 json.WriteEndObject();
 json.WriteStartArray("ExtraArray");
 for (var i = 0; i < extraData.Length; i++)
 {
 json.WriteNumberValue(extraData[i]);
 }
 json.WriteEndArray();
 json.WriteEndObject();
 json.Flush(isFinalBlock: true);
 return (int)json.BytesWritten;
}

此外還對WPF與WinForms召烂、Windows Native互操作等等進(jìn)行了支持和改進(jìn)碱工,這里就不一一介紹了。相信再過不久,.NET Core 3就能正式和大家見面了怕篷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末历筝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子廊谓,更是在濱河造成了極大的恐慌梳猪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒸痹,死亡現(xiàn)場離奇詭異春弥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)叠荠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門匿沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榛鼎,你說我怎么就攤上這事逃呼。” “怎么了者娱?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵抡笼,是天一觀的道長。 經(jīng)常有香客問我黄鳍,道長蔫缸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任际起,我火速辦了婚禮拾碌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘街望。我一直安慰自己校翔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布灾前。 她就那樣靜靜地躺著防症,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哎甲。 梳的紋絲不亂的頭發(fā)上蔫敲,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機(jī)與錄音炭玫,去河邊找鬼奈嘿。 笑死,一個胖子當(dāng)著我的面吹牛吞加,可吹牛的內(nèi)容都是我干的裙犹。 我是一名探鬼主播尽狠,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叶圃!你這毒婦竟也來了袄膏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤掺冠,失蹤者是張志新(化名)和其女友劉穎沉馆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德崭,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡斥黑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了接癌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡扣讼,死狀恐怖缺猛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椭符,我是刑警寧澤荔燎,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站销钝,受9級特大地震影響有咨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒸健,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一座享、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧似忧,春花似錦渣叛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饺著,卻和暖如春箫攀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幼衰。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工靴跛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渡嚣。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓汤求,卻偏偏與公主長得像俏险,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扬绪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫竖独、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,064評論 4 62
  • 一紙挤牛,一墨莹痢,一水,一筆墓赴,靜竞膳,貴,難得诫硕,需珍惜
    yu余魚君子閱讀 152評論 0 0
  • 長長的人生路匆匆過坦辟,一不留神,一天過去了章办,一年過去了锉走。在這樣飛逝的日子里,你定神一想藕届,貌似什么痕跡也不曾留下挪蹭,不禁...
    小小_1a8c閱讀 159評論 2 1
  • 說起下雨,一般人都會想起滂沱大雨休偶,為了不被打濕衣服梁厉,路上的行人打著各花各樣的傘。為了保護(hù)自己踏兜,有的阿姨會用膠袋保護(hù)...
    Bonny天恩閱讀 219評論 0 0