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

C# 获取系统命名空间中的所有.net可用类型,c#,system.reflection,C#,System.reflection,是否有一个函数或通过使用反射来获取所有系统类型 例如: -System.Int64 System.Byte[] System.Boolean System.String System.Decimal System.Double 我们有一个旧的enum,它存储一些数据类型。我们需要将这些类型转换为.net类型假设您只需要mscorlib中的类型,这很容易: var mscorlib = typeof(string).Assembly; var types = mscorlib.GetType

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

例如: -
System.Int64

  • System.Byte[]

  • System.Boolean

  • System.String

  • System.Decimal

  • System.Double


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

假设您只需要
mscorlib
中的类型,这很容易:

var mscorlib = typeof(string).Assembly;
var types = mscorlib.GetTypes()
                    .Where(t => t.Namespace == "System");
但是,它不会返回
字节[]
,因为这是一种数组类型。它也不会返回不同程序集中的类型。如果您有多个感兴趣的程序集,可以使用:

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

@乔恩·斯基特:非常感谢你伟大的解决方案

如果某个完整的noob(像我一样)读到了这个主题,我会发现Jon Skeet的代码有一个小小的调整,以获得更多指定的输出。例如:

        Assembly mscorlib = typeof(int).Assembly; 
        IEnumerable<System.Type> types = mscorlib.GetTypes()
                            .Where(t => t.Namespace == "System" && t.IsPrimitive);
Assembly mscorlib=typeof(int).Assembly;
IEnumerable types=mscorlib.GetTypes()
其中(t=>t.Namespace==“系统”和&t.IsPrimitive);

最后一个代码行中的第二个参数“…&&t.{here_is_property}”是类型类属性之一。您可以从中尝试另一个,以获得您真正需要的内容。

回答您问题的类似条目希望有所帮助。这将返回比我想要的更多的内容。有没有办法只得到基本的一次喜欢。事实上,我正在数据库类型和.net类型之间进行映射。因此,我需要转换数据库中的一个旧sql列,将其替换为.net类型。@billybob:那么您应该准确地指定您想要的内容。我已经回答了您提出的问题:“在系统名称空间中获取所有.net可用类型”-您真正想要的实际上一点也不清楚,但听起来好像不是您真正想要的…谢谢。我想我只需要硬编码那些需要映射到.net类型的代码。它回答了这个问题。