是否有函数或使用反射来获取所有系统类型。
像那些:
- System.Int64
System.Byte[]
System.Boolean
System.String
System.Decimal
System.Double
...
我们有一个旧的enum
存储一些数据类型。我们需要将它们转换为.net types
。
答案 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 中的另一种来获得您真正需要的东西。