C#12中的Collection expressions集合表達(dá)式語法糖詳解
C#12中引入了新的語法糖來創(chuàng)建常見的集合。并且可以使用..
來解構(gòu)集合,將其內(nèi)聯(lián)到另一個(gè)集合中。
支持的類型
- 數(shù)組類型,例如 int[]。
- System.Span<T> 和 System.ReadOnlySpan<T>。
- 支持常見泛型集合,例如 System.Collections.Generic.List<T>。
集合表達(dá)式使用
以下展示了如何使用集合表達(dá)式
static void Main(string[] args) { List<string> names1 = ["one", "two"]; List<string> names2 = ["three", "four"]; List<List<string>> names3 = [["one", "two"], ["three", "four"]]; List<List<string>> names4 = [names1, names2]; }
可以看出使用方法十分簡單
集合表達(dá)式解構(gòu)
在C#12中通過..
即可將一個(gè)集合解構(gòu),并將其作為另一個(gè)集合的元素。
static void Main(string[] args) { List<string> names1 = ["one", "two"]; List<string> names2 = ["three", "four"]; List<string> name = [.. names1, .. names2]; }
自定義類型支持集合表達(dá)式
類型通過編寫 Create() 方法,和對集合類型應(yīng)用System.Runtime.CompilerServices.CollectionBuilderAttribute
選擇加入集合表達(dá)式支持。以下是個(gè)例子
[CollectionBuilder(typeof(LineBufferBuilder), "Create")] public class LineBuffer : IEnumerable<char> { private readonly char[] _buffer = new char[80]; public LineBuffer(ReadOnlySpan<char> buffer) { int number = (_buffer.Length < buffer.Length) ? _buffer.Length : buffer.Length; for (int i = 0; i < number; i++) { _buffer[i] = buffer[i]; } } public IEnumerator<char> GetEnumerator() => _buffer.AsEnumerable<char>().GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _buffer.GetEnumerator(); } internal static class LineBufferBuilder { internal static LineBuffer Create(ReadOnlySpan<char> values) => new LineBuffer(values); } internal class Program { static void Main(string[] args) { LineBuffer line = ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!']; } }
首先,需要?jiǎng)?chuàng)建一個(gè)包含 Create 方法的類:LineBufferBuilder。LineBufferBuilder.Create
方法必須返回 LineBuffer 對象,并且必須采用 ReadOnlySpan<char> 類型的單個(gè)參數(shù)。
最后,必須將 CollectionBuilderAttribute
添加到 LineBuffer 類聲明。其中,第一個(gè)參數(shù)提供生成器類的名稱, 第二個(gè)特性提供生成器方法的名稱。
這樣一個(gè)自定義的類就可以支持集合表達(dá)式了。
到此這篇關(guān)于C#12中的Collection expressions集合表達(dá)式語法糖詳解的文章就介紹到這了,更多相關(guān)C#12語法糖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#數(shù)據(jù)綁定之將datatabel的data添加listView
這篇文章主要介紹了c#將DataTabel的data添加ListView的示例,實(shí)現(xiàn)功能是通過響應(yīng)UI Textbox 的值向ListView 綁定新添加的紀(jì)錄。 ,需要的朋友可以參考下2014-04-04C#數(shù)據(jù)表格(DataGridView)控件的應(yīng)用案例
這篇文章主要介紹了C#數(shù)據(jù)表格(DataGridView)控件的應(yīng)用案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03c#只讀字段和常量的區(qū)別,以及靜態(tài)構(gòu)造函數(shù)的使用實(shí)例
這篇文章主要介紹了c#只讀字段和常量的區(qū)別,以及靜態(tài)構(gòu)造函數(shù)的使用實(shí)例,有需要的朋友可以參考一下2013-12-12c#一個(gè)定時(shí)重啟的小程序?qū)崿F(xiàn)代碼
今天有個(gè)朋友找我問有沒有一些能像Windows一樣計(jì)劃任務(wù)重啟的軟件,我也不清楚。他它說能讓我做一個(gè)給他它么?我考慮了一下,他的服務(wù)器都是有安裝.NET框架的,那可以用.NET來使下~~!2008-09-09Unity學(xué)習(xí)之FSM有限狀態(tài)機(jī)
這篇文章主要介紹了Unity學(xué)習(xí)之FSM有限狀態(tài)機(jī),通過詳細(xì)的代碼案例來進(jìn)行解析說明,希望這篇文章對你有所幫助2021-06-06WinForm實(shí)現(xiàn)程序一段時(shí)間不運(yùn)行自動(dòng)關(guān)閉的方法
這篇文章主要介紹了WinForm實(shí)現(xiàn)程序一段時(shí)間不運(yùn)行自動(dòng)關(guān)閉的方法,涉及WinForm計(jì)時(shí)器及進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09Gridview自動(dòng)排序功能的實(shí)現(xiàn)
本篇文章主要是對Gridview自動(dòng)排序功能的實(shí)現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01C#過濾DataTable中空數(shù)據(jù)和重復(fù)數(shù)據(jù)的示例代碼
這篇文章主要給大家介紹了關(guān)于C#過濾DataTable中空數(shù)據(jù)和重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01