Цикл внутри пространств имен сборки? - PullRequest
1 голос
/ 06 февраля 2012

У меня есть метод, который занимался какой-то работой над всеми классами сборки:

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*/)
    {
        [...]
    }
}

Но после всех моих исследований в Интернете и здесь, на SO, я не нашел ничего, что бы мне понравилось ... Единственное, что я смог сделать, это:

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

foreach (Type type in types)
{
    if (!namespaceList.Contains(type.Namespace))
    {
        namespaceList.Add(type.Namespace);
    }
}

Но я ничего не могу сделать с этим списком ... Да, я могу перебрать все члены в namespaceList, а затем зациклить все типы и проверить, находятся ли они (сравнение строк) внутри текущего пространства имен, но я действительночувствую, что это не тот путь ...

Любая помощь будет очень признательна!

1 Ответ

5 голосов
/ 06 февраля 2012

Вы можете использовать метод LINQ GroupBy :

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