Skip to content

反模式和陷阱

识别和避免源生成器开发中的常见反模式和陷阱。


📋 文档信息

属性
难度中级到高级
阅读时间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

基于 MIT 许可发布