如何将 ClassDeclarationSyntax 对象与 IdentifierNameSyntax 对象进行比较?

How can I compare a ClassDeclarationSyntax object against an IdentifierNameSyntax object?

我正在用 C# 编写一个源代码生成器,我有 2 个对象需要比较以查看它们是否与相同的对象相关 class,但我找不到方法来做吧。

我的第一个对象是 ClassDeclarationSyntax 的实例。这来自我的自定义 ISyntaxContextReceiver 以查找符合特定条件的 classes。

在我的生成器的其他地方,我有一个 IdentifierNameSyntax 对象,它来自于查看 TypeOfExpressionSyntax 中的类型,我在不同的 class 的属性列表中找到.

我需要比较这里的两个对象,看看它们是否在谈论同一件事。

有了 IdentifierNameSyntax 我可以使用语义模型获取类型信息:

ITypeSymbol semanticType = semanticModel.GetTypeInfo(targetType).Type;

但我也不知道如何比较这个 ITypeSymbolClassDeclarationSyntax

有没有办法做到这一点,或者有没有办法获取 ClassDeclarationSyntax 对象的语义模型类型信息?

您正在寻找的方法是 GetDeclaredSymbol semanticModel。正如 you can see from the documentation,有大量的重载,不仅可以让您获得 类 的相关符号信息,还可以获取字段、方法、属性、事件、参数等的关联符号信息。绝对是您想要收藏的方法!