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

C# 如何获取命名空间中的所有类?,c#,.net,reflection,namespaces,C#,.net,Reflection,Namespaces,如何在C#?中获得命名空间中的所有类,通过反射可以循环遍历程序集中的所有类型。类型有一个名称空间属性,您可以使用该属性仅筛选您感兴趣的名称空间。您需要提供更多信息 你的意思是使用反射吗。您可以遍历程序集清单 并使用 System.Reflection.Assembly myAssembly = Assembly.LoadFile(""); myAssembly.ManifestModule.FindTypes() 如果只是在Visual Studio中,您可以在intellise

如何在C#?

中获得命名空间中的所有类,通过反射可以循环遍历程序集中的所有类型。类型有一个名称空间属性,您可以使用该属性仅筛选您感兴趣的名称空间。

您需要提供更多信息

你的意思是使用反射吗。您可以遍历程序集清单 并使用

   System.Reflection.Assembly myAssembly = Assembly.LoadFile("");

   myAssembly.ManifestModule.FindTypes()
如果只是在Visual Studio中,您可以在intellisense窗口中获取列表,或者通过打开对象浏览器(CTRL+W,J)

您需要“向后”执行该操作;列出程序集中的所有类型,然后检查每个类型的命名空间:

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

.Where(t=>String.Equals(t.Namespace,Namespace,StringComparison.Ordinal)另外,请记住Assembly!=名称空间-一些名称空间分布在多个程序集中。为什么不只返回一个IEnumerable?更重要的是,在结果之间进行枚举,我认为“foreach”而不是“for”更好。很好的注释,谢谢。通过将返回类型设置为IEnumerable,就不需要或者是最后一个ToArray电话。我不确定我是否同意“foreach”比“for”更好;但在我看来,性能差异是可以忽略的,所以我认为这可以归结为个人风格。但可能有一个很好的理由更喜欢“foreach”;如果是的话,请随意分享;我喜欢被证明是错误的:)我认为foreach更容易亲自查看。在幕后,这两个循环在性能上几乎相同
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);
}