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

Posted

技术标签:

【中文标题】获取系统命名空间中的所有 .net 可用类型【英文标题】:Get all .net available type in system namespace 【发布时间】:2015-06-15 05:25:02 【问题描述】:

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

像那些: - System.Int64

System.Byte[]

System.Boolean

System.String

System.Decimal

System.Double

...

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

【问题讨论】:

回答您的问题的类似条目***.com/questions/79693/… 希望对您有所帮助。 【参考方案1】:

假设您只需要来自 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");

【讨论】:

这比我想要的回报更多。有没有办法只得到基本的一次喜欢。事实上,我正在做数据库类型和.net 类型之间的映射。所以我需要将数据库中的旧 sql 列替换为 .net 类型。 @billybob:那么你应该准确地指定你想要的。我已经回答了您提出的问题:“在系统命名空间中获取所有 .net 可用类型” - 您真正想要什么真的一点都不清楚,但听起来它不是您实际要求的... 谢谢。我想我只会硬编码需要用 .net 类型映射的那些。它回答了这个问题。【参考方案2】:

@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 尝试另一个,以获得您真正需要的。

【讨论】:

以上是关于获取系统命名空间中的所有 .net 可用类型的主要内容,如果未能解决你的问题,请参考以下文章

获取 AppDomain 中所有可用命名空间的列表

获取命名空间内的所有类[重复]

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

面向对象进阶

模块命名空间中的定义顺序是不是可用?

命名空间“系统”中不存在类型或命名空间名称“事务”(您是不是缺少程序集引用?) - C# ASP.NET