获取系统命名空间中所有 .net 可用类型
Get all .net available type in system namespace
是否有函数或使用反射获取所有系统类型的方法。
像那些:
- System.Int64
System.Byte[]
System.Boolean
System.String
System.Decimal
System.Double
...
我们有一个旧的 enum
存储一些数据类型。我们需要将它们转换为 .net types
.
假设您只需要 mscorlib
中的类型,这很简单:
var mscorlib = typeof(string).Assembly;
var types = mscorlib.GetTypes()
.Where(t => t.Namespace == "System");
但是,不会 return byte[]
,因为那是数组类型。它也不会 return 在不同的程序集中键入。如果您有多个感兴趣的程序集,您可以使用:
var assemblies = ...;
var types = assemblies.SelectMany(a => a.GetTypes())
.Where(t => t.Namespace == "System");
@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}”是类型 Class 属性之一。您可以尝试 .NET official reference 中的另一个来获得您真正需要的。
是否有函数或使用反射获取所有系统类型的方法。
像那些:
- System.Int64
System.Byte[]
System.Boolean
System.String
System.Decimal
System.Double
...
我们有一个旧的 enum
存储一些数据类型。我们需要将它们转换为 .net types
.
假设您只需要 mscorlib
中的类型,这很简单:
var mscorlib = typeof(string).Assembly;
var types = mscorlib.GetTypes()
.Where(t => t.Namespace == "System");
但是,不会 return byte[]
,因为那是数组类型。它也不会 return 在不同的程序集中键入。如果您有多个感兴趣的程序集,您可以使用:
var assemblies = ...;
var types = assemblies.SelectMany(a => a.GetTypes())
.Where(t => t.Namespace == "System");
@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}”是类型 Class 属性之一。您可以尝试 .NET official reference 中的另一个来获得您真正需要的。