反模式和陷阱
识别和避免源生成器开发中的常见反模式和陷阱。
📋 文档信息
| 属性 | 值 |
|---|---|
| 难度 | 中级到高级 |
| 阅读时间 | 70 分钟 |
| 前置知识 | 源生成器基础、最佳实践 |
| 相关文档 | 最佳实践、常见场景 |
🎯 学习目标
完成本系列文档后,你将能够:
- ✅ 识别性能反模式
- ✅ 避免正确性问题
- ✅ 提高代码可维护性
- ✅ 编写高质量的源生成器
📚 文档列表
本系列文档分为以下几个部分:
| 文档 | 说明 | 难度 |
|---|---|---|
| 性能反模式 | 性能问题和优化方案 | 中级 |
| 正确性反模式 | 逻辑错误和修复方法 | 高级 |
| 可维护性反模式 | 代码质量和维护问题 | 中级 |
🚀 快速开始
常见反模式示例
csharp
// ❌ 反模式:在每次调用时重新创建编译
public void BadExample(SyntaxNode node)
{
var compilation = CSharpCompilation.Create("Temp");
// 每次都创建新编译,性能差
}
// ✅ 正确:缓存编译对象
private CSharpCompilation _cachedCompilation;
public void GoodExample(SyntaxNode node)
{
if (_cachedCompilation == null)
{
_cachedCompilation = CSharpCompilation.Create("Cached");
}
// 重用编译对象
}📊 反模式分类
性能反模式
- 重复创建对象 - 频繁创建编译、语义模型等昂贵对象
- 不必要的遍历 - 多次遍历语法树
- 缺少缓存 - 不缓存计算结果
- 同步操作 - 在异步上下文中使用同步操作
正确性反模式
- 符号比较错误 - 使用
==而不是SymbolEqualityComparer - 忽略诊断 - 不检查编译错误
- 类型检查不完整 - 不处理所有类型情况
- 空引用 - 不检查 null 值
可维护性反模式
- 硬编码字符串 - 魔法字符串和硬编码值
- 缺少文档 - 没有注释和文档
- 复杂逻辑 - 过于复杂的条件和嵌套
- 重复代码 - 代码重复
🔗 相关资源
🚀 下一步
最后更新: 2026-02-06