转换为嵌套类格式

时间:2017-11-29 20:28:46

标签: c# roslyn

考虑到这样的事情:

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+BarMyStuff.Foo.Bar内的嵌套类还是名称空间Foo内的非嵌套类?

1 个答案:

答案 0 :(得分:1)

你可以自己看一下:

.上拆分名称,然后从compilation.SourceModule.GlobalNamespace开始,遍历每个部分并在当前符号上调用GetMembers(name)以获取具有该名称的ITypeOrNamespaceSymbol