考虑到这样的事情:
namespace Mystuff
{
public class Foo
{
public class Bar
{
}
}
}
在Rosyln,如果我想得到代表Bar
的符号,我可以这样做:
var barSymbol = compilation.GetTypeByMetadataName("MyStuff.Foo+Bar");
但这不起作用:
var barSymbol = compilation.GetTypeByMetadataName("MyStuff.Foo.Bar");
您必须让+
表示Bar
嵌套在Foo
中。但是,如果我拥有的是字符串MyStuff.Foo.Bar
(因为它来自其他地方,其名称为Bar
),是否有任何可靠的方法从MyStuff.Foo.Bar
到{{1如果您不知道先验 MyStuff.Foo+Bar
是MyStuff.Foo.Bar
内的嵌套类还是名称空间Foo
内的非嵌套类?
答案 0 :(得分:1)
你可以自己看一下:
在.
上拆分名称,然后从compilation.SourceModule.GlobalNamespace
开始,遍历每个部分并在当前符号上调用GetMembers(name)
以获取具有该名称的ITypeOrNamespaceSymbol
。