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。仍在发生:(