如何获取命名空间中的所有类?
Posted
技术标签:
【中文标题】如何获取命名空间中的所有类?【英文标题】:How can I get all classes within a namespace? 【发布时间】:2010-10-31 06:12:42 【问题描述】:如何在 C# 中获取命名空间内的所有类?
【问题讨论】:
Taking out all classes of a specific namespace的可能重复 Getting all types in a namespace via reflection的可能重复 【参考方案1】:你需要“倒退”;列出程序集中的所有类型,然后检查每种类型的命名空间:
using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
return
assembly.GetTypes()
.Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
.ToArray();
使用示例:
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
Console.WriteLine(typelist[i].Name);
对于 .Net 2.0 之前的任何东西,Assembly.GetExecutingAssembly()
不可用,您需要一个小的解决方法来获取程序集:
Assembly myAssembly = typeof(<Namespace>.<someClass>).GetTypeInfo().Assembly;
Type[] typelist = GetTypesInNamespace(myAssembly, "<Namespace>");
for (int i = 0; i < typelist.Length; i++)
Console.WriteLine(typelist[i].Name);
【讨论】:
.Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal) 另外,请记住 Assembly != 命名空间 - 一些命名空间分布在多个程序集中。 为什么不只返回一个 IEnumerable您需要提供更多信息...
你的意思是使用反射。您可以遍历程序集清单 并使用
获取类型列表 System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
如果只是在 Visual Studio 中,你可以在智能感知窗口中获取列表,或者通过打开对象浏览器(CTRL+W,J)
【讨论】:
【参考方案3】:使用反射,您可以循环访问程序集中的所有类型。一个类型有一个 Namespace 属性,你可以用它来过滤你感兴趣的命名空间。
【讨论】:
以上是关于如何获取命名空间中的所有类?的主要内容,如果未能解决你的问题,请参考以下文章