源代码生成器:编译时自动生成样板代码
使用 Roslyn 分析器在编译阶段生成代码,消除反射和手动编写的重复逻辑(如自动 INotifyPropertyChanged、DTO 映射)。 · 难度:入门 · +10XP
源代码生成器:编译时自动生成样板代码
Source Generator 是 C# 编译时管道的一部分,能读取项目中的语法树并生成附加源文件。本教程从零构建一个生成器:为标注了 [AutoNotify] 的字段自动生成属性更改通知。你会学习 IncrementalGenerator 模式、如何缓存语法节点、以及调试生成器的方法。最终你会看到一个可在 MVVM 框架中直接使用的生成器。
[Generator]
public class AutoNotifyGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
var fields = context.SyntaxProvider.CreateSyntaxProvider(
predicate: (node, _) => node is FieldDeclarationSyntax f && f.AttributeLists.Count > 0,
transform: (ctx, _) => (FieldDeclarationSyntax)ctx.Node
).Where(f => f != null);
// 生成属性代码...
}
}