C# 如何从类中获取它继承的所有接口(使用roslyn)?

C# 如何从类中获取它继承的所有接口(使用roslyn)?,c#,roslyn,C#,Roslyn,我有一个类Letters,它继承自接口IA,而IA继承自接口IB。如何使用roslyn获得接口IA和IB?(我有ClassDeclarationSyntax) 公共接口IB { } 公共接口IA:IB { } 公开信:IA { } 尝试以下方法: var interFacesOfLetters = typeof(Letters).GetInterfaces(); foreach (var x in interFacesOfLetters) {

我有一个类
Letters
,它继承自接口
IA
,而
IA
继承自接口
IB
。如何使用roslyn获得接口
IA
IB
?(我有
ClassDeclarationSyntax

公共接口IB
{
}
公共接口IA:IB
{
}
公开信:IA
{
}
尝试以下方法:

 var interFacesOfLetters = typeof(Letters).GetInterfaces();
            foreach (var x in interFacesOfLetters)
            {
                Console.WriteLine(x.Name);
            }
编辑#1

对于动态类名

  var name = "NameSpaceName.Letters";
  var interFacesOfLetters = Type.GetType(name).GetInterfaces();
  foreach (var x in interFacesOfLetters)
  {
    Console.WriteLine(x.Name);
  }

只有当您试图使用反射来访问类型信息时,其他答案才有效

要使用Roslyn,您必须使用为您的
字母
类获取
INAMEDYPESYMBOL
,然后使用

我没有安装Roslyn,但它应该是:

var tree = CSharpSyntaxTree.ParseText(@"
public interface IB
{
}
public interface IA : IB
{
}
public class Letters:IA
{
}
");

var Mscorlib = PortableExecutableReference.CreateFromAssembly(typeof(object).Assembly);
var compilation = CSharpCompilation.Create("MyCompilation",
    syntaxTrees: new[] { tree }, references: new[] { Mscorlib });
var model = compilation.GetSemanticModel(tree);

var myClass = tree.GetRoot().DescendantNodes().OfType<ClassDeclarationSyntax>().Last();
var myClassSymbol = model.GetDeclaredSymbol(myClass);

var interfaces = myClassSymbol.AllInterfaces;
var-tree=CSharpSyntaxTree.ParseText(@)
公共接口IB
{
}
公共接口IA:IB
{
}
公开信:IA
{
}
");
var Mscorlib=PortableExecutableReference.CreateFromAssembly(typeof(object.Assembly));
var compilation=csharpcomilation.Create(“MyCompilation”,
syntaxTrees:new[]{tree},references:new[]{Mscorlib});
var model=compilation.GetSemanticModel(树);
var myClass=tree.GetRoot().degenantNodes().OfType().Last();
var myClassSymbol=model.GetDeclaredSymbol(myClass);
var interfaces=myClassSymbol.AllInterfaces;

您可以使用
Type.GetInterfaces
,它将检索所提供类型派生的所有接口。谢谢。但是,如果我想编写一种从任何类获取接口的通用方法,我该怎么做呢?Type.GetType(name)返回null。我能做什么?如果您提供了完整有效的名称,则不应返回null。仍在发生:(