使用Roslyn如何知道IdentifierName SyntaxNode是否引用以下示例中的属性:
{{1}}
当我打印SyntaxNode树时,最后两个赋值表达式看起来是一样的。我怎么知道b.Data的IdentifierName节点是一个属性?我已经检查了ISymbol,ITypeSymbol并且看不到这样做。
以下是我打印出的SyntaxNode树的一部分。
{{1}}
您可以看到Data和Normal的IdentifierName节点看起来一样。
感谢。
答案 0 :(得分:0)
您需要检查从SemannticModel.GetSymbolInfo
返回的ISymbol是IFieldSymbol还是IPropertySymbol。
答案 1 :(得分:0)
那是因为语法节点只告诉你语法。语法树的构造没有引用;它既不知道也不关心名字是什么(甚至根本不存在)。
相反,您需要语义模型,它来自编译。
获取IdentifierName
的符号,然后检查其Kind
是Property
还是Field
。
如果符号为null,则可能存在编译错误。