我想创建一个值类型的实例,如, System.StringSystem.Boolean,System.Int32等。我得到了类型的限定名称System.StringorMyNamespace.Employee,我必须创建一个实例并返回。我使用Activator.CreateInstanceandFormatterServices.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   回答