Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用反射创建值类型的实例_C#_.net_Reflection_Value Type - Fatal编程技术网

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

C# 如何使用反射创建值类型的实例,c#,.net,reflection,value-type,C#,.net,Reflection,Value Type,我想创建一个值类型的实例,如System.String,System.Boolean,System.Int32,等等。我得到了System.String或MyNamespace.Employee等类型的限定名称,我必须创建一个实例并返回。我使用Activator.CreateInstance和FormatterServices.GetUninitializedObject创建实例。但在值类型的情况下,它会失败。对于值类型,我无法硬编码逻辑。我需要一种创建值类型和引用类型实例的通用方法。您到底想做

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

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


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

var instance = Activator.CreateInstance(typeof(Int32));
它为我提供了一个设置为0的Int32实例

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

这对我很有用:

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


如果尝试使用特定于语言的别名(如
“int”
)或缩写形式(如
“Int32”
)System.String是引用类型,而不是值类型,则尝试将失败。Eish Jaco!我只是回去把我的'var'改成'int',以防OP不熟悉'var',而你偷偷地输入了与我完全相同的代码行。:-)哈哈-你必须画得很快:-)哦,很适合一般的东西:)
int x = (int)Activator.CreateInstance(typeof (Int32), true);
    object num = Activator.CreateInstance(Type.GetType("System.Int32"));