【问题标题】:How can I get all classes within a namespace?如何获取命名空间中的所有类?
【发布时间】:2010-10-31 06:12:42
【问题描述】:

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

【问题讨论】:

标签: c# .net reflection namespaces


【解决方案1】:

使用反射,您可以循环访问程序集中的所有类型。一个类型有一个 Namespace 属性,你可以用它来过滤你感兴趣的命名空间。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      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?更重要的是,您在结果之间进行枚举,我认为“foreach”而不是“for”更好。
      • 好的 cmets,谢谢。通过将返回类型设置为 IEnumerable 消除了对最后一次 ToArray 调用的需要。不确定我是否同意“foreach”比“for”更好;在我看来,性能差异可以忽略不计,所以我认为这归结为个人风格。但可能有一个很好的论据来支持“foreach”;如果有,请随时分享;我喜欢被证明是错误的:)
      • 我认为 foreach 只是个人更容易看。在幕后,这两个循环在性能方面几乎相同。
      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 2014-05-10
      • 2011-06-21
      • 2020-01-26
      • 2011-08-12
      相关资源
      最近更新 更多