我该如何在C#中获取命名空间内的所有类?
您需要“倒过来”做;列出程序集中的所有类型,然后检查每个类型的命名空间:
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);
}
IEnumerable
和foreach
循环。 - kwitee您需要提供更多信息...
您是指使用反射吗?您可以遍历程序集的清单并使用以下代码获取类型列表
System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
如果只是在 Visual Studio 中,您可以在智能感知窗口中获取列表,或通过打开对象浏览器(CTRL + W,J)来获取列表。