如何从IdentifierNameSyntax获取BaseType

问题描述 投票:0回答:3

我尝试制作分析器,它将从

IB
内的
A
类中检测 BaseType
list.Add(typeof(A));
。我有
A
作为
IdentifierNameSyntax
但没有方法获得基础
IB
。或者存在?你能帮我吗?

class Consolidator
{
...
    public void Warner()
    {
        list.Add(typeof(A));
    }
...
}

class A : IB
{
...
}
c# roslyn
3个回答
1
投票

在Roslyn分析器中,您需要使用SemanticModel来绑定typeof内的事物。调用 SemanticModel.GetSymbolInfo(),这将为您提供一个 INamedTypeSymbol。从那里您可以检查基本类型。


0
投票

我认为您正在寻找的是

Type.BaseType
房产。有关更多详细信息,请查看 MSDN 文档:Type.BaseType

using System;
                    
public class Program
{
    public static void Main()
    {
        var variable = new A();
        Console.WriteLine(variable.GetType().BaseType);
    }
}
class IB
{
//
}

class A : IB
{
//
}

0
投票

当我在

.BaseTypes
上检查
INamedTypeSymbol
时,我只得到实际的类型名称,而不是 完全限定 类型名称。所以我无法在呼叫
Type.GetType(string)
 时使用 
.IsAssignableFrom/To

知道如何获得完整类型名称吗?

© www.soinside.com 2019 - 2024. All rights reserved.