<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
.NET 首席專案經理凱瑟琳在部落格中介紹了 C# 11 的一些預覽性新功能,這些功能可以在 Visual Studio 17.1 和 .NET SDK 6.0.200 中體驗,下面摘錄一部分新特性作介紹:
內插字串(interpolated strings)是 C# 6.0 引入的語法,它允許在字串中插入表示式。C# 的內插字串分為非逐字和逐字內插字串(分別是$""
和$@""
)兩種。兩者最大的區別是:非逐字內插字串與普通字串一樣,不能在字串文字中包含換行符,必須使用跳脫符(如r
、n
)。相反,逐字插值字串可以在其文欄位中包含換行符,並且不會跳脫換行符或其他字元。
但是,非逐字插值字串中的“換行符限制”,從字串文字擴散到了文字之外的插值表示式,這導致了很多不必要的限制。比如在 C# 11 之前,下面這段程式碼編譯起來會報錯:
var v = $"Count ist: { this.Is.A.Really () .That.I.Should ( be + able)[ to.Wrap ()] }.";
但在 C# 11 預覽版中,它是合法的,可以正常編譯。
關於該新特性的詳細討論可檢視 GitHub Issue #4935。
新的列表模式允許將陣列或列表與一系列模式匹配,例如 array is [1, 2, 3] 將匹配長度為 3 的整數陣列,其元素分別為 1、2、3。除了允許匹配列表和陣列,還可以匹配元素,且可以選擇包含零個或多個元素的切片模式。使用切片模式可以丟棄或捕獲零個或多個元素。
列表模式的語法是用方括號括起來的值,切片模式的語法是兩個點..
。切片模式後面可以跟著另一個列表模式,比如 var 模式來捕獲切片內容。
比如,該模式匹配以下所有內容:[1, 2, .., 10]
:
int[] arr1 = { 1, 2, 10 }; int[] arr1 = { 1, 2, 5, 10 }; int[] arr1 = { 1, 2, 5, 6, 7, 8, 9, 10 };
要探索列表模式,請參考:
public static int CheckSwitch (int[] values) => values switch { [1, 2, .., 10] => 1, [1, 2] => 2, [1, _] => 3, [1, ..] => 4, [..] => 50 };
當它傳遞以下陣列時,結果如下所示:
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
還可以捕獲切片模式的結果:
public static string CaptureSlice (int[] values) => values switch { [1, .. var middle, _] => $"Middle {String.Join (", ", middle)}", [.. var all] => $"All {String.Join (", ", all)}" };
列表模式適用於任何可計數和可索引的型別 —— 這意味著它有一個可存取的Length
或Count
屬性,以及一個帶int
或System.Index
形參的索引器。
切片模式適用於任何可計數和可切片的型別 —— 這意味著它有一個以Range
為實參的可存取索引器,或者具有兩個int
形參的可存取Slice
方法。
目前正在考慮在 IEnumerable 型別上新增對列表模式的支援,點此檢視關於該列表模式的詳細介紹。
C# 11提供了一種簡化的語法,用於驗證方法的引數不是null
,以及正確丟擲ArgumentNullException
。
以前可以使用樣板程式碼的變體來驗證方法引數是否為空:
public static void M (string s) { if (s is null) { throw new ArgumentNullException (nameof (s)); } // Body of the method }
使用新的引數 null 檢查,可以通過新增!!
到引數名,自動執行空值檢查:
public static void M (string s!!) { // Body of the method }
自動生成的空值檢查程式碼將在方法主體的程式碼之前執行。對於構造器,該空值檢查發生在欄位初始化、呼叫base
建構函式和呼叫this
建構函式之前。
有關該新的引數空值檢查,可在此檢視詳細介紹。
若要嘗試 C# 11 的預覽特性,請建立一個 C# 專案,並將 LangVersion 設定為 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>
有關 C# 11 的更多詳細內容及新特性的資料請關注it145.com其它相關文章,或通過 GitHub 上的 CSharpLang 儲存庫進行討論!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45