最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

源生成器(二):高效輕量的增量生成器

2022-04-03 16:34 作者:撲克子  | 我要投稿

據(jù)上篇專欄根據(jù)需要自動生成機(jī)械重復(fù)代碼(C#、Attribute、源生成器),可以生成簡單的源生成器,但每次代碼一處更改時都會掃描整個語法樹,開銷很大,新的增量生成器[1](Incremental Generator)通過管道[2]等方式遴選需要掃描的代碼,大大減少生成開銷

注:增量生成器是Roslyn 4.x的新功能,對應(yīng)VS17.x(即Visual Studio?2022),也就是說只有VS2022及以上的版本才可以使用

創(chuàng)建及使用Attribute

同上篇

創(chuàng)建TypeWithAttributeGenerator

同上篇的源生成器,但繼承于IIncrementalGenerator

而且這次為了提高效率、方便擴(kuò)展,讓所有attribute共用一個生成器,添加新的attribute時只需在Attributes上加一條鍵值對即可

初始化

初始化增量生成器,并指定篩選的兩層,最后注冊以供運(yùn)行

兩次快速篩選

第一次篩選留下帶有attribute的class和record類型,十分高效

第二次再選擇attribute包含于Attributes里的類型

運(yùn)行增量生成器

對每個type的每種attribute進(jìn)行處理,調(diào)用Attributes的值(處理函數(shù))

處理函數(shù)

對比上篇的處理函數(shù),函數(shù)聲明稍有變化,但完全等同:

原參數(shù)GeneratorExecutionContext context被取消,AddSource操作改為用string返回,并在Execute函數(shù)中實(shí)現(xiàn)

原參數(shù)INamedTypeSymbol attributeType是用來判斷是否是指定的attribute,通過以下代碼實(shí)現(xiàn)

現(xiàn)在傳入數(shù)組List<AttributeData> attributeList,直接傳入所有的指定類型的Attribute,可替代該冗長語句

其他兩個參數(shù)同上篇專欄

函數(shù)體內(nèi)容與上篇內(nèi)容幾乎一致,故不再贅述

引用圖片

[わいっしゅ] ID = 96178543

參考資料

[1] GitHub-IncrementalGenerators(https://github.com/dotnet/roslyn/blob/main/docs/features/incremental-generators.md)

[2]?Creating a source generator(https://andrewlock.net/series/creating-a-source-generator)

源生成器(二):高效輕量的增量生成器的評論 (共 條)

分享到微博請遵守國家法律
台江县| 大新县| 敖汉旗| 茶陵县| 嘉峪关市| 扬中市| 五莲县| 正镶白旗| 江都市| 延津县| 古交市| 荆州市| 元朗区| 胶州市| 金寨县| 大名县| 陇南市| 巍山| 陆川县| 霞浦县| 上饶县| 天峨县| 景泰县| 江源县| 河北区| 安西县| 清新县| 松溪县| 体育| 苍梧县| 虹口区| 玉门市| 凌源市| 高雄县| 容城县| 临武县| 武川县| 青神县| 宣化县| 柏乡县| 社旗县|