我似乎无法使用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()
方法适用于任何类型,嵌套或其他类型.
尝试使用+
分隔内部类:
var innerClass = compilation.GetTypeByMetadataName("MyNamespace.MyClass+MyInnerClass");
该Type.GetType
方法的文档讨论了用于命名嵌套类型的语法.