【发布时间】: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() 方法应该适用于任何类型,嵌套或其他类型。
【问题讨论】: