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

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

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

分享到微博請遵守國家法律
体育| 延安市| 墨竹工卡县| 北京市| 武川县| 霸州市| 三江| 安西县| 陕西省| 北碚区| 孟州市| 巩义市| 阜新市| 天气| 邻水| 莱阳市| 宜黄县| 壶关县| 攀枝花市| 桐柏县| 临漳县| 澄迈县| 珲春市| 板桥市| 灵寿县| 凌海市| 韩城市| 五莲县| 巩留县| 广丰县| 合阳县| 芷江| 峨山| 胶南市| 南川市| 沁源县| 海淀区| 青河县| 泗阳县| 偃师市| 揭东县|