前言本文记录一次简单的 SourceGenerator 实战,最终实现可以在代码中 await 任意类型对象,仅供娱乐 , 请勿在生产环境中使用?。。?
关键技术:
- SourceGenerator
- 在编译时动态生成代码的技术 。官方文档:源生成器
- 关于
IncrementalGenerator的基本使用可以参考 dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
SourceGenerator除了提供附加文件进行代码生成,还有丰富的语法树、类型等分析API
SourceGenerator只能拓展代码,不能替换代码
- Await anything
- C#中的
async/await最终由编译器编译为状态机,其核心逻辑在于await对象需要实现符合要求的GetAwaiter方法,这个方法可以是拓展方法
- 参见官方博客 await anything;
await 我们的思路大概如下:- 找到所有的
await语法
- 检查
await的对象是否有GetAwaiter方法
- 为没有
GetAwaiter方法的对象生成GetAwaiter拓展方法
SourceGenerator 丰富的分析API,我们可以很容易的办到这件事推荐阅读
- 文字的力量先听语音再对梗怎么过
- iphone13pro和华为p50pro拍照对比_哪款拍照效果更好
- 荣耀平板v7pro和小米平板5哪个好_荣耀平板v7pro和小米平板5对比
- Docker | redis集群部署实战
- 苹果iphone13mini和12mini有什么区别_参数对比
- paddle&蜜度 文本智能较对大赛经验分享(17/685)
- 红米k40和魅族18x对比_哪款更值得入手
- 三星watch4和classic区别_三星watch4和classic区别对比
- iPhone13ProMax和华为Mate40Pro+对比_哪款更值得入手
- 骁龙888和三星Exynos1080区别对比_哪个性能好
