代码之家  ›  专栏  ›  技术社区  ›  Hemanshu Bhojak

如何使用反射创建值类型的实例

  •  9
  • Hemanshu Bhojak  · 技术社区  · 15 年前

    我想创建一个值类型的实例,比如 System.String , System.Boolean , System.Int32 ,等等。我得到了以下类型的限定名 系统字符串 MyNamespace.Employee 我必须创建一个实例并返回。我用 Activator.CreateInstance FormatterServices.GetUninitializedObject 创建实例。但在值类型的情况下,它会失败。对于值类型,我无法硬编码逻辑。我需要一种创建值类型和引用类型实例的通用方法。

    4 回复  |  直到 11 年前
        1
  •  12
  •   Marc Gravell    15 年前

    你到底想做什么? FormatterServices.GetUninitializedObject 主要由序列化代码使用;除此之外,你不应该真正使用它。信息技术 声音 就像你可能只需要 TypeConverter ,即(对于这些类型)

    TypeConverter tc = TypeDescriptor.GetConverter(someType);
    object obj = tc.ConvertFromString(s);
    
        2
  •  3
  •   Jaco Pretorius    15 年前

    失败到底是什么?我尝试了以下代码以查看值类型是否存在问题:

    var instance = Activator.CreateInstance(typeof(Int32));
    

    你的代码到底在哪里失败了?否则,我会说问题在于加载类型的方式,而不是创建实例的方式。

        3
  •  1
  •   John K    15 年前

    对于BCL值类型(以及使用字符串描述类型时),请确保未使用C#关键字,并确保该类型完全符合命名空间。例如,C#int是通过Activator.CreateInstance(..)以这种方式成功创建的

        object num = Activator.CreateInstance(Type.GetType("System.Int32"));
    

    如果您尝试使用特定于语言的别名,例如 "int" "Int32" .

        4
  •  0
  •   ProfK    15 年前

    这对我很有用:

    int x = (int)Activator.CreateInstance(typeof (Int32), true);
    
    推荐文章