前言本文记录一次简单的 SourceGenerator
实战,最终实现可以在代码中 await
任意类型对象,仅供娱乐,请勿在生产环境中使用!!!
关键技术:
- SourceGenerator
- 【[C#]SourceGenerator实战: 对任意对象使用await吧!!!】在编译时动态生成代码的技术 。官方文档:源生成器
- 关于
IncrementalGenerator
的基本使用可以参考 dotnet 用 SourceGenerator 源代码生成技术实现中文编程语言
SourceGenerator
除了提供附加文件进行代码生成,还有丰富的语法树、类型等分析API
SourceGenerator
只能拓展
代码,不能替换
代码
- Await anything
- C#中的
async/await
最终由编译器编译为状态机,其核心逻辑在于await
对象需要实现符合要求的GetAwaiter
方法,这个方法可以是拓展方法
- 参见官方博客 await anything;
await
我们的思路大概如下:- 找到所有的
await
语法
- 检查
await
的对象是否有GetAwaiter
方法
- 为没有
GetAwaiter
方法的对象生成GetAwaiter
拓展方法
SourceGenerator
丰富的分析API,我们可以很容易的办到这件事经验总结扩展阅读
- 情结理不清,哪些星座配对逃不开情感上的纠缠
- 在一起越久感情会愈发浓烈的星座配对
- 2023年12月14日搬家好吗 搬家吉日查询
- 2023年12月14日是黄道吉日吗 今日黄历卦象分析和建议
- 文字的力量先听语音再对梗怎么过
- 生肖蛇和生肖猴能配吗
- iphone13pro和华为p50pro拍照对比_哪款拍照效果更好
- 荣耀平板v7pro和小米平板5哪个好_荣耀平板v7pro和小米平板5对比
- 2022年12月2日开业日子好吗
- 2023年10月开张吉利日子一览表