Skip to content

FAQ 分册 2:目标筛选与信息提取

Q7:ForAttributeWithMetadataName(...) 找不到我的类

Q8:SyntaxNodeISymbol 有什么区别?

  • 症状:看到 TargetNodeTargetSymbolSemanticModel,但分不清该用哪个
  • 可能原因:还没有建立“语法看长相,语义看含义”的分层意识
  • 解决方案:先记最短口诀:SyntaxNode 看代码长什么样,符号看它真实代表什么
  • 相关章节:第 7 章
  • 相关术语:SyntaxNodeGeneratorAttributeSyntaxContextSemanticModel

Q9:如何获取属性的类型信息?

  • 症状:拿到了属性,但不知道怎么判断它是不是 string?intNullable<int>
  • 可能原因:只停留在属性名,还没有进入 IPropertySymbol.Type
  • 解决方案:先从 IPropertySymbol.Type 拿到 ITypeSymbol,再看 ToDisplayString()IsValueTypeNullableAnnotation
  • 相关章节:第 8 章第 10 章
  • 相关术语:IPropertySymbolITypeSymbolNullableAnnotation

Q10:GetMembers() 返回了很多我不需要的成员

  • 症状:只想拿属性,却看到了方法、字段、事件等一大堆成员
  • 可能原因:GetMembers() 返回的是类型下的全部成员
  • 解决方案:先 OfType<IPropertySymbol>() 过滤,再按 DeclaredAccessibilityGetMethod 继续筛选
  • 相关章节:第 8 章
  • 相关术语:INamedTypeSymbolIPropertySymbolAccessibility

Q17:怎么读取特性参数?

下一步去哪里

基于当前仓库文档副本构建的 VitePress 站点