程序集命名空间内部的循环

本文关键字:循环 内部 命名空间 程序集 | 更新日期: 2023-09-27 18:23:43

我有一个方法,它在程序集的所有类上都做了一些工作:

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();
foreach (Type type in types)
{
    [...]
}

问题是,现在,我想为程序集的每个命名空间拆分代码!类似的东西

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();
foreach (/*namespace in my assembly*/)
{
    foreach (Type type /*in my Namespace*/)
    {
        [...]
    }
}

但在我在网上和这里进行了所有的研究之后,我没有找到任何我喜欢的东西。。。我唯一能做的就是:

List<string> namespaceList = new List<string>();
foreach (Type type in types)
{
    if (!namespaceList.Contains(type.Namespace))
    {
        namespaceList.Add(type.Namespace);
    }
}

但我对这份名单无能为力。。。是的,我可以循环浏览namespaceList上的所有成员,然后循环所有类型,并测试它们是否在当前命名空间内(字符串比较),但我真的觉得这不是办法。。。

任何帮助都将不胜感激!

程序集命名空间内部的循环

您可以使用LINQ GroupBy方法:

var namespaces = library.GetTypes().GroupBy(t => t.Namespace);
foreach (var typesInNamespace in namespaces)
{
    foreach (var type in typesInNamespace)
    {
      ...
    }
}