在程序集的命名空间内循环?

Gui*_*shy 1 c# assemblies namespaces

我有一个方法是对程序集的所有类进行一些工作:

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();

foreach (Type type in types)
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

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

var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();

foreach (/*namespace in my assembly*/)
{
    foreach (Type type /*in my Namespace*/)
    {
        [...]
    }
}
Run Code Online (Sandbox Code Playgroud)

但毕竟我在网上的研究和在这里我没有找到任何我喜欢的东西......我唯一能做的就是:

List<string> namespaceList = new List<string>();

foreach (Type type in types)
{
    if (!namespaceList.Contains(type.Namespace))
    {
        namespaceList.Add(type.Namespace);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我无法对此List做任何事情...是的,我可以循环遍历namespaceList上的所有成员然后循环所有类型并测试它们是否(当前命名空间中的字符串比较),但我真的觉得它不是要走的路......

任何帮助将非常感激 !

Ric*_*lly 5

您可以使用LINQ GroupBy方法:

var namespaces = library.GetTypes().GroupBy(t => t.Namespace);
foreach (var typesInNamespace in namespaces)
{
    foreach (var type in typesInNamespace)
    {
      ...
    }
}
Run Code Online (Sandbox Code Playgroud)