Roslyn的GetTypeByMetadataName()和Generic Types

 手机用户2502871157 发布于 2023-01-09 18:48

我正在尝试检索给定类型中的所有IMethodSymbols.对于封闭类型(即没有泛型的类型),我可以使用CSharpCompilation.GetTypeByMetaDataName()并传入完全限定的类型名称.

但是,对于开放类型(例如MyClass),完全限定名称似乎不起作用.我已经尝试提供没有type参数(MyClass)的完全限定名称,也提供了一个封闭类型(MyClass),但似乎都没有.

使用完全限定名称查找此类型的最佳方法是什么?

1 个回答
  • 正如评论中所提到的,编译器约定是采用类名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");
    

    2023-01-09 18:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有