欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#11新特性預(yù)覽及使用介紹

 更新時(shí)間:2022年05月14日 12:47:13   作者:溪源More  
這篇文章主要為大家介紹了C#11新特性預(yù)覽及使用介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

.NET 首席項(xiàng)目經(jīng)理凱瑟琳在博客中介紹了 C# 11 的一些預(yù)覽性新功能,這些功能可以在 Visual Studio 17.1 和 .NET SDK 6.0.200 中體驗(yàn),下面摘錄一部分新特性作介紹:

C# 11 預(yù)覽:允許在內(nèi)插字符串的“插值表達(dá)式”中換行

內(nèi)插字符串(interpolated strings)是 C# 6.0 引入的語(yǔ)法,它允許在字符串中插入表達(dá)式。C# 的內(nèi)插字符串分為非逐字和逐字內(nèi)插字符串(分別是$""$@"")兩種。兩者最大的區(qū)別是:非逐字內(nèi)插字符串與普通字符串一樣,不能在字符串文本中包含換行符,必須使用轉(zhuǎn)義符(如\r、\n)。相反,逐字插值字符串可以在其文本段中包含換行符,并且不會(huì)轉(zhuǎn)義換行符或其他字符。

但是,非逐字插值字符串中的“換行符限制”,從字符串文本擴(kuò)散到了文本之外的插值表達(dá)式,這導(dǎo)致了很多不必要的限制。比如在 C# 11 之前,下面這段代碼編譯起來(lái)會(huì)報(bào)錯(cuò):

var v = $"Count is\t: { this.Is.A.Really ()
                            .That.I.Should (
                                be + able)[
                                    to.Wrap ()] }.";

但在 C# 11 預(yù)覽版中,它是合法的,可以正常編譯。

關(guān)于該新特性的詳細(xì)討論可查看 GitHub Issue #4935。

C# 11 預(yù)覽:列表模式

新的列表模式允許將數(shù)組或列表與一系列模式匹配,例如 array is [1, 2, 3] 將匹配長(zhǎng)度為 3 的整數(shù)數(shù)組,其元素分別為 1、2、3。除了允許匹配列表和數(shù)組,還可以匹配元素,且可以選擇包含零個(gè)或多個(gè)元素的切片模式。使用切片模式可以丟棄或捕獲零個(gè)或多個(gè)元素。

列表模式的語(yǔ)法是用方括號(hào)括起來(lái)的值,切片模式的語(yǔ)法是兩個(gè)點(diǎn)..。切片模式后面可以跟著另一個(gè)列表模式,比如 var 模式來(lái)捕獲切片內(nèi)容。

比如,該模式匹配以下所有內(nèi)容:[1, 2, .., 10]

int[] arr1 = { 1, 2, 10 };
int[] arr1 = { 1, 2, 5, 10 };
int[] arr1 = { 1, 2, 5, 6, 7, 8, 9, 10 };

要探索列表模式,請(qǐng)參考:

public static int CheckSwitch (int[] values)
    => values switch
    {
        [1, 2, .., 10] => 1,
        [1, 2] => 2,
        [1, _] => 3,
        [1, ..] => 4,
        [..] => 50
    };

當(dāng)它傳遞以下數(shù)組時(shí),結(jié)果如下所示:

WriteLine (CheckSwitch (new[] { 1, 2, 10 }));          // prints 1
WriteLine (CheckSwitch (new[] { 1, 2, 7, 3, 3, 10 })); // prints 1
WriteLine (CheckSwitch (new[] { 1, 2 }));              // prints 2
WriteLine (CheckSwitch (new[] { 1, 3 }));              // prints 3
WriteLine (CheckSwitch (new[] { 1, 3, 5 }));           // prints 4
WriteLine (CheckSwitch (new[] { 2, 5, 6, 7 }));        // prints 50

還可以捕獲切片模式的結(jié)果:

public static string CaptureSlice (int[] values)
    => values switch
    {
        [1, .. var middle, _] => $"Middle {String.Join (", ", middle)}",
        [.. var all] => $"All {String.Join (", ", all)}"
    };

列表模式適用于任何可計(jì)數(shù)和可索引的類(lèi)型 —— 這意味著它有一個(gè)可訪問(wèn)的LengthCount屬性,以及一個(gè)帶intSystem.Index形參的索引器。

切片模式適用于任何可計(jì)數(shù)和可切片的類(lèi)型 —— 這意味著它有一個(gè)以Range為實(shí)參的可訪問(wèn)索引器,或者具有兩個(gè)int形參的可訪問(wèn)Slice方法。

目前正在考慮在 IEnumerable 類(lèi)型上添加對(duì)列表模式的支持,點(diǎn)此查看關(guān)于該列表模式的詳細(xì)介紹。

C# 11 預(yù)覽:新的參數(shù)空值檢查

C# 11提供了一種簡(jiǎn)化的語(yǔ)法,用于驗(yàn)證方法的參數(shù)不是null,以及正確拋出ArgumentNullException

以前可以使用樣板代碼的變體來(lái)驗(yàn)證方法參數(shù)是否為空:

public static void M (string s)
{
    if (s is null)
    {
        throw new ArgumentNullException (nameof (s));
    }
    // Body of the method
}

使用新的參數(shù) null 檢查,可以通過(guò)添加!!到參數(shù)名,自動(dòng)執(zhí)行空值檢查:

public static void M (string s!!)
{
    // Body of the method
}

自動(dòng)生成的空值檢查代碼將在方法主體的代碼之前執(zhí)行。對(duì)于構(gòu)造器,該空值檢查發(fā)生在字段初始化、調(diào)用base構(gòu)造函數(shù)和調(diào)用this構(gòu)造函數(shù)之前。

有關(guān)該新的參數(shù)空值檢查,可在此查看詳細(xì)介紹。

如何嘗試預(yù)覽特性

若要嘗試 C# 11 的預(yù)覽特性,請(qǐng)創(chuàng)建一個(gè) C# 項(xiàng)目,并將 LangVersion 設(shè)置為 preview,.csproj文件配置如下:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <LangVersion>preview</LangVersion>
    </PropertyGroup>
</Project>

有關(guān) C# 11 的更多詳細(xì)內(nèi)容及新特性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章,或通過(guò) GitHub 上的 CSharpLang 存儲(chǔ)庫(kù)進(jìn)行討論!

相關(guān)文章

  • C#實(shí)現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進(jìn)制字符串的方法

    C#實(shí)現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進(jìn)制字符串的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將32位MD5摘要串轉(zhuǎn)換為128位二進(jìn)制字符串的方法,涉及C#字符串遍歷、加密與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • C#實(shí)現(xiàn)帶進(jìn)度條的ListView

    C#實(shí)現(xiàn)帶進(jìn)度條的ListView

    這篇文章主要介紹了C#實(shí)現(xiàn)帶進(jìn)度條的ListView 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • C#實(shí)現(xiàn)的調(diào)用DOS命令操作類(lèi)實(shí)例

    C#實(shí)現(xiàn)的調(diào)用DOS命令操作類(lèi)實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)的調(diào)用DOS命令操作類(lèi),實(shí)例分析了C#調(diào)用系統(tǒng)常用DOS命令的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • c# 異步編程入門(mén)

    c# 異步編程入門(mén)

    這篇文章主要介紹了c# 異步編程入門(mén)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • 如何使用C#中的Lazy的使用方法

    如何使用C#中的Lazy的使用方法

    這篇文章主要介紹了如何使用C#中的Lazy的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#監(jiān)控文件夾并自動(dòng)給圖片文件打水印的方法

    C#監(jiān)控文件夾并自動(dòng)給圖片文件打水印的方法

    這篇文章主要介紹了C#監(jiān)控文件夾并自動(dòng)給圖片文件打水印的方法,涉及C#針對(duì)文件夾及圖片操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • C#中尾遞歸的使用、優(yōu)化及編譯器優(yōu)化

    C#中尾遞歸的使用、優(yōu)化及編譯器優(yōu)化

    這篇文章主要介紹了C#中尾遞歸的使用、優(yōu)化及編譯器優(yōu)化,本文講解了遞歸運(yùn)用、尾遞歸優(yōu)化、編譯器優(yōu)化等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#實(shí)現(xiàn)發(fā)送簡(jiǎn)單HTTP請(qǐng)求的方法

    C#實(shí)現(xiàn)發(fā)送簡(jiǎn)單HTTP請(qǐng)求的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)發(fā)送簡(jiǎn)單HTTP請(qǐng)求的方法,涉及C#操作http的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#單位轉(zhuǎn)換器簡(jiǎn)單案例

    C#單位轉(zhuǎn)換器簡(jiǎn)單案例

    這篇文章主要為大家詳細(xì)介紹了C#單位轉(zhuǎn)換器簡(jiǎn)單案例,一個(gè)簡(jiǎn)單的winform應(yīng)用程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Dynamic和Var的區(qū)別及dynamic使用詳解

    Dynamic和Var的區(qū)別及dynamic使用詳解

    C#中的很多關(guān)鍵詞用法比較容易混淆,var和dynamic就是其中一組,他們都可以申明動(dòng)態(tài)類(lèi)型的變量,但是本質(zhì)上他們還是有不少區(qū)別的,下面通過(guò)本文給大家介紹Dynamic和Var的區(qū)別及如何正確使用dynamic,需要的朋友參考下
    2016-01-01

最新評(píng)論