2014-06-18 61 views
4

我似乎無法使用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()方法應該適用於嵌套或其他類型的任何類型。

回答

6

嘗試使用+分開內部類:

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

Type.GetType方法的文檔討論了用於命名嵌套類型的語法。

+0

這是正確的,適用。謝謝! – JoshVarty

相關問題