如何获取命名空间中的所有类?

时间:2009-06-04 08:26:45

标签: c# .net reflection namespaces

如何在C#中获取命名空间中的所有类?

3 个答案:

答案 0 :(得分:128)

你需要“倒退”;列出程序集中的所有类型,然后检查每种类型的命名空间:

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);
}

对于在Assembly.GetExecutingAssembly()不可用的.Net 2.0之前的任何内容,您需要一个小的解决方法来获取程序集:

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);
}

答案 1 :(得分:5)

您需要提供更多信息......

你的意思是使用Reflection。您可以遍历程序集Manifest 并使用

获取类型列表
   System.Reflection.Assembly myAssembly = Assembly.LoadFile("");

   myAssembly.ManifestModule.FindTypes()

如果只是在Visual Studio中,您可以在智能感知窗口中获取列表,或打开对象浏览器(CTRL + W,J)

答案 2 :(得分:0)

使用Reflection,你可以循环遍历程序集中的所有类型。类型具有Namespace属性,您可以使用该属性仅过滤您感兴趣的命名空间。