获取系统命名空间中的所有 .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 可用类型的主要内容,如果未能解决你的问题,请参考以下文章