如何在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);
}

.net相关问答推荐

升级到.NET8后,SignalR(在坞站容器上)网关损坏

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

在 Invoke() 中运行时,跨线程操作对表单控件无效 - .NET

部署时如何控制红隼端口?

使用 PostAsJsonAsync C# 时出现错误请求

为什么 .NET 中的 System.Version 定义为 Major.Minor.Build.Revision?

为什么具有可为空值的 struct 的 HashSet 非常慢?

如何从标头中检索基本身份验证凭据?

如何判断 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

多个等待与 Task.WaitAll - 等效?

如何从字符串中删除所有字母字符?

为什么 Interlocked.Exchange 不支持布尔类型?

互锁且易变

在未安装 Visual Studio 的机器上使用 FUSLOGVW.EXE

Visual Studio 类图不显示关系

为什么发布和调试模式下的代码行为不同?

DLL 中有什么以及它是如何工作的?

.NET 的 XPath 和 XSLT 2.0?

程序员应该使用 SSIS,如果是,为什么?

MultipleActiveResultSets=True 还是多个连接?