Нет, для этого нет ярлыка, хотя LINQ делает его относительно простым. Например, в C # необработанный «набор пространств имен» будет:
var namespaces = assembly.GetTypes()
.Select(t => t.Namespace)
.Distinct();
Чтобы получить пространство имен верхнего уровня, вам, вероятно, следует написать метод:
var topLevel = assembly.GetTypes()
.Select(t => GetTopLevelNamespace(t))
.Distinct();
...
static string GetTopLevelNamespace(Type t)
{
string ns = t.Namespace ?? "";
int firstDot = ns.IndexOf('.');
return firstDot == -1 ? ns : ns.Substring(0, firstDot);
}
Я заинтригован тем, почему вам нужны только пространства имен верхнего уровня, хотя ... это кажется странным ограничением.