我想创建一个值类型的实例,如, System.String
System.Boolean
,System.Int32
等。我得到了类型的限定名称System.String
orMyNamespace.Employee
,我必须创建一个实例并返回。我使用Activator.CreateInstance
andFormatterServices.GetUninitializedObject
创建实例。但是在值类型的情况下它会失败。在值类型的情况下,我无法对逻辑进行硬编码。我需要一种创建值类型和引用类型实例的通用方法。
问问题
8462 次
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 回答