五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

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

分享到微博請遵守國家法律
正阳县| 通渭县| 绥棱县| 卓尼县| 监利县| 柳江县| 哈密市| 富川| 泾川县| 延边| 林甸县| 丹棱县| 枝江市| 长寿区| 章丘市| 安乡县| 铁岭市| 全椒县| 南昌县| 定南县| 肥城市| 宁河县| 五华县| 阳原县| 陆丰市| 苏尼特左旗| 墨玉县| 图片| 武陟县| 阿拉尔市| 龙山县| 普洱| 平阴县| 贵港市| 财经| 寿宁县| 集贤县| 马公市| 泉州市| 太康县| 武宣县|