【问题标题】:How can I retrieve a nested type with its fully qualified name?如何检索具有完全限定名称的嵌套类型?
【发布时间】:2015-06-07 09:36:13
【问题描述】:

我似乎无法使用 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() 方法应该适用于任何类型,嵌套或其他类型。

【问题讨论】:

    标签: c# nested roslyn


    【解决方案1】:

    尝试使用+ 分隔内部类:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2011-01-02
      • 1970-01-01
      • 2010-11-12
      相关资源
      最近更新 更多