【发布时间】:2011-06-21 19:24:33
【问题描述】:
简单地说,我希望项目中的所有命名空间都递归,并且类在之前找到的所有命名空间中都可用。
var namespaces = assembly.GetTypes()
.Select(ns => ns.Namespace);
我之前使用这部分来获取字符串格式的命名空间。 但现在我也了解了底层的命名空间。
【问题讨论】:
标签: c# .net reflection namespaces
简单地说,我希望项目中的所有命名空间都递归,并且类在之前找到的所有命名空间中都可用。
var namespaces = assembly.GetTypes()
.Select(ns => ns.Namespace);
我之前使用这部分来获取字符串格式的命名空间。 但现在我也了解了底层的命名空间。
【问题讨论】:
标签: c# .net reflection namespaces
听起来你可能想要一个从命名空间到类的Lookup:
var lookup = assembly.GetTypes().ToLookup(t => t.Namespace);
或者(非常相似)你可以使用GroupBy:
var groups = assembly.GetTypes().GroupBy(t => t.Namespace);
例如:
var groups = assembly.GetTypes()
.Where(t => t.IsClass) // Only include classes
.GroupBy(t => t.Namespace);
foreach (var group in groups)
{
Console.WriteLine("Namespace: {0}", group.Key);
foreach (var type in group)
{
Console.WriteLine(" {0}", t.Name);
}
}
但是,这是否是您所追求的并不完全清楚。这将为您提供每个命名空间中的类,但我不知道这是否真的是您要寻找的。p>
要记住两点:
如果你真的想从“Foo.Bar.Baz”转到“Foo.Bar”和“Foo”,那么你可以使用类似的东西:
while (true)
{
Console.WriteLine(ns);
int index = ns.LastIndexOf('.');
if (index == -1)
{
break;
}
ns = ns.Substring(0, index);
}
【讨论】: