无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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)

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

分享到微博請遵守國家法律
嘉义市| 霍林郭勒市| 哈密市| 江川县| 五指山市| 随州市| 衡阳市| 肇庆市| 英德市| 津市市| 湖南省| 九龙县| 泌阳县| 乐清市| 神池县| 泾阳县| 南川市| 奉化市| 璧山县| 板桥市| 仙居县| 蒲城县| 上饶县| 尚义县| 巫溪县| 五原县| 宣汉县| 双辽市| 师宗县| 凤阳县| 华宁县| 石屏县| 永昌县| 梁山县| 昌都县| 丹东市| 龙口市| 四川省| 双桥区| 平安县| 法库县|