Roslyn:检测IdentifierName是否属性?

时间:2017-10-30 15:19:24

标签: c# roslyn

使用Roslyn如何知道IdentifierName SyntaxNode是否引用以下示例中的属性:

{{1}}

当我打印SyntaxNode树时,最后两个赋值表达式看起来是一样的。我怎么知道b.Data的IdentifierName节点是一个属性?我已经检查了ISymbol,ITypeSymbol并且看不到这样做。

以下是我打印出的SyntaxNode树的一部分。

{{1}}

您可以看到Data和Normal的IdentifierName节点看起来一样。

感谢。

2 个答案:

答案 0 :(得分:0)

您需要检查从SemannticModel.GetSymbolInfo返回的ISymbol是IFieldSymbol还是IPropertySymbol

答案 1 :(得分:0)

那是因为语法节点只告诉你语法。语法树的构造没有引用;它既不知道也不关心名字是什么(甚至根本不存在)。

相反,您需要语义模型,它来自编译。

获取IdentifierName的符号,然后检查其KindProperty还是Field

如果符号为null,则可能存在编译错误。