获取系统命名空间中的所有.net可用类型

时间:2015-04-09 17:42:59

标签: c# system.reflection

是否有函数或使用反射来获取所有系统类型。

像那些: - System.Int64

  • System.Byte[]

  • System.Boolean

  • System.String

  • System.Decimal

  • System.Double

  • ...

我们有一个旧的enum存储一些数据类型。我们需要将它们转换为.net types

2 个答案:

答案 0 :(得分:7)

假设您只想要来自mscorlib的类型,那很简单:

var mscorlib = typeof(string).Assembly;
var types = mscorlib.GetTypes()
                    .Where(t => t.Namespace == "System");

但是,不会返回byte[],因为这是一种数组类型。它也不会返回不同程序集中的类型。如果您有多个您感兴趣的程序集,可以使用:

var assemblies = ...;
var types = assemblies.SelectMany(a => a.GetTypes())
                      .Where(t => t.Namespace == "System");

答案 1 :(得分:1)

@jon-skeet:非常感谢您提供出色的解决方案!

如果一些完整的菜鸟(像我一样)阅读了这个主题,我发现对 Jon Skeet 的代码进行了一个微小的调整,以获得更多指定的输出。例如:

        Assembly mscorlib = typeof(int).Assembly; 
        IEnumerable<System.Type> types = mscorlib.GetTypes()
                            .Where(t => t.Namespace == "System" && t.IsPrimitive);

最后一行代码中的第二个参数 "...&& t.{here_is_property}" 是类型类属性之一。您可以尝试使用 .NET official reference 中的另一种来获得您真正需要的东西。