枚举宏内部程序集中的所有类型

时间:2011-08-25 08:29:29

标签: nemerle

如何在Nemerle的类MacroTargets.Assembly的宏属性中获取程序集中的所有类型?

2 个答案:

答案 0 :(得分:1)

名称树包含所有类型。您可以自己遍历和过滤它,也可以调用其GetTypeBuilders方法。

[ Nemerle.MacroUsage
    ( Nemerle.MacroPhase.WithTypedMembers
    , Nemerle.MacroTargets.Assembly
    )
]
macro ListTypes()
{
    def PrintNameTree(node, depth)
    {
        repeat (depth)
            Write("    ");
        Write("|");
        WriteLine(node.PartName);
        unless (node.Children == null)
        {
            foreach (child in node.Children.Values)
                PrintNameTree(child, depth + 1);
        }
    }

    def env = ImplicitCTX().Env;
    def names = env.NameTree;
    PrintNameTree(names.NamespaceTree, 0);
}

答案 1 :(得分:1)

除了Don Reba的回答......

您应该使用Node.EnsureCached()方法来确保缓存元数据。