bool InheritsFrom(ITypeSymbol symbol, string expectedParentTypeName)
{
while (true)
{
if (symbol.ToString().Equals(expectedParentTypeName))
{
return true;
}
if (symbol.BaseType != null)
{
symbol = symbol.BaseType;
continue;
}
break;
}
return false;
}
symbol
包含需要检查的类型,但这种方法不起作用,因为代码无法获取符号的父类型。
symbol.BaseType
两次返回相同的类类型,然后(在下一次迭代中)我得到 symbol.BaseType
等于 null
。
expectedParentTypeName
包含完全限定的类型名称:例如 some.namespace.blablabla.TypeC
如何解决这个问题?
更新
如上所述,假设我们有以下继承层级:
TypeA -> TypeB -> TypeC -> TypeD
经过分析,我获得一个具有类型 TypeD
的属性,并且我想检查它是否从 TypeB
继承而来。
更新 #2
TypeA -> TypeB -> TypeC -> TypeD
类型在我编写代码分析器时尚不存在。因此,我不能使用此类类型的 typeof 和其他东西。
它们仅在分析器要工作的上下文中存在。
我的分析器获取源代码的一部分,将其识别为类型名称,并且我想检查该识别的类型名称是否继承自另一个从自定义 nuget 包导入的自定义类型。
我拥有的全部内容 - 我有要分析的源代码,以及类、属性、字段等声明中那些自定义类型的名称。
更新 #3
对于以下代码:
SyntaxNodeAnalysisContext context; // is already initialized
PropertyDeclarationSyntax propertyDeclaration = (PropertyDeclarationSyntax)context.Node;
ClassDeclarationSyntax classDeclaration = (ClassDeclarationSyntax) propertyDeclaration.Parent;
TypeInfo propertyTypeInfo = context.SemanticModel.GetTypeInfo(propertyDeclaration);
TypeInfo classTypeInfo = context.SemanticModel.GetTypeInfo(classDeclaration);
propertyTypeInfo
和classTypeInfo
中没有包含任何信息。