Roslyn's gettypebymetadata()和泛型类型

本文关键字:泛型类型 gettypebymetadata Roslyn | 更新日期: 2023-09-27 18:08:17

我试图检索给定类型内的所有IMethodSymbols。对于封闭类型(如:没有泛型的类型)我可以使用csharpcompile . gettypebymetadataname()并传递完全限定类型名称。

但是,对于开放类型(例如:MyClass<T>)完全限定名似乎不起作用。我试过在没有类型参数(MyClass)的情况下提供完全限定的名称,也有封闭类型(MyClass<int>),但似乎都不起作用。

用它的全限定名找到这个类型的最好方法是什么?

Roslyn's gettypebymetadata()和泛型类型

正如在注释中提到的,编译器的约定是取一个类名,如MyClass<T>,并将其表示为

MyClass`1

工作示例:

var tree = CSharpSyntaxTree.ParseText(@"
public class MyClass<T> {
    public static T Method()
    {
    }
}");
var mscorlib = new MetadataFileReference(typeof(object).Assembly.Location);
var compilation = CSharpCompilation.Create("MyCompilation",
       syntaxTrees: new[] { tree }, references: new[] { mscorlib });
var type = compilation.GetTypeByMetadataName("MyClass`1");