如何检索具有完全限定名称的嵌套类型?

 雅皮享客被 发布于 2023-01-08 16:16

我似乎无法使用Roslyn的Compilation.GetTypeByMetaDataName()方法检索嵌套类.

例如:

var tree = CSharpSyntaxTree.ParseText(@"
using System;
namespace MyNamespace
{
    public class MyClass 
    {
        public class MyInnerClass
        {
        }
    }
}
");

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

//Correctly retrieves outer type.
var outerClass = compilation.GetTypeByMetadataName("MyNamespace.MyClass");
//Cannot correctly retrieve inner type (returns null)
var innerClass = compilation.GetTypeByMetadataName("MyNamespace.MyClass.MyInnerClass");

是否可以使用其完全限定名称检索嵌套类型?

我意识到一个解决方法是首先检查包含类型是否包含任何类型INamespaceorTypeSymbol.GetTypeMembers(),但我宁愿不去那条路.我假设该GetTypeByMetaDataName()方法适用于任何类型,嵌套或其他类型.

1 个回答
  • 尝试使用+分隔内部类:

    var innerClass = compilation.GetTypeByMetadataName("MyNamespace.MyClass+MyInnerClass");
    

    Type.GetType方法的文档讨论了用于命名嵌套类型的语法.

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