10

我想创建一个值类型的实例,如System.String, System.Boolean,System.Int32等。我得到了类型的限定名称System.Stringor MyNamespace.Employee,我必须创建一个实例并返回。我使用Activator.CreateInstanceandFormatterServices.GetUninitializedObject创建实例。但是在值类型的情况下它会失败。在值类型的情况下,我无法对逻辑进行硬编码。我需要一种创建值类型和引用类型实例的通用方法。

4

4 回答 4

12

你到底想做什么?FormatterServices.GetUninitializedObject主要由序列化代码使用;除此之外,您不应该真正使用它。听起来您可能只需要类似TypeConverter, 即(对于这些类型)

TypeConverter tc = TypeDescriptor.GetConverter(someType);
object obj = tc.ConvertFromString(s);
于 2010-01-04T06:33:54.820 回答
3

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

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

它给了我一个设置为 0 的 Int32 实例。

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

于 2010-01-04T06:34:21.077 回答
1

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

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

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

于 2010-01-04T06:35:46.113 回答
0

这对我有用:

int x = (int)Activator.CreateInstance(typeof (Int32), true);
于 2010-01-04T06:35:15.583 回答