代码之家  ›  专栏  ›  技术社区  ›  Tree55Topz

获取特定目录中的所有命名空间

  •  0
  • Tree55Topz  · 技术社区  · 6 年前

    我正试图找到一种方法来检索我们测试目录中的所有名称空间。项目中的所有类都共享一个相同的名称空间,因此我还需要获取类。我要找的结果应该是这样的

    Project.ClassA
    Project.ClassB
    

    其中project是命名空间,classa是类名。我尝试过这样的功能…

    assembly = Assembly.GetAssembly(typeof(System.Int32));
    var groups = assembly.GetTypes().Where(t => t.IsClass);
    
    foreach(var group in groups)
    {
       Console.WriteLine(group);
    }
    

    但是,这会返回一系列系统信息,与我正在寻找的内容无关。我走对了吗?另外,如何使它只在测试目录中显示?

    1 回复  |  直到 6 年前
        1
  •  1
  •   DavidG    6 年前

    这将为您提供属于当前应用程序域的所有类型(即加载的所有类型):

    var types = AppDomain.CurrentDomain
        .GetAssemblies()
        .SelectMany(a => a.GetTypes());
    

    如果要筛选该列表,只需添加一个 Where 条款:

    var types = AppDomain.CurrentDomain
        .GetAssemblies()
        .SelectMany(a => a.GetTypes())
        .Where(a => !string.IsNullOrEmpty(a.Namespace) && 
                    a.Namespace.StartsWith("Foo"));
    

    对他们做点什么:

    foreach(var type in types)
    {
        Console.WriteLine($"Found type {type.Name}");
    }