C# 将字符串的值转换为C中的类型#

C# 将字符串的值转换为C中的类型#,c#,.net,reflection,C#,.net,Reflection,我有一个包含类型的字符串变量 例如: String StrType ="Int32"; // Or "Decimal" Or Char Or an Enum Color 我想创建类型为StrType(StrType的值)的新变量 在本例中,我希望有以下变量: Int32 MyType; 我不想使用swich或if…else来检测类型,因为 不是这个--> (换句话说,我在StrType中有一个类型名,我想用它创建一个新变量 (在运行时输入) 我能做什么 您可能正在查找Type.GetType

我有一个包含类型的字符串变量 例如:

String StrType ="Int32"; // Or "Decimal" Or Char Or an Enum Color
我想创建类型为StrType(StrType的值)的新变量

在本例中,我希望有以下变量:

Int32 MyType;
我不想使用swich或if…else来检测类型,因为 不是这个-->

(换句话说,我在StrType中有一个类型名,我想用它创建一个新变量 (在运行时输入)


我能做什么

您可能正在查找
Type.GetType(StrType)
-这将获得一个包含相应类型的类型变量。如果要获取StrType的对象实例,则需要使用一点反射,如下所示:

    var t = Type.GetType("System.Int32");
    var constructor = t.GetConstructor(Type.EmptyTypes);
    object intObject = constructor.Invoke(null); //intObject will have type System.Int32

当然,只有成功解析该类型并且该类型存在无参数构造函数时,这才有效。在生产环境中,您应该为它添加检查。

我没有使用它,但请尝试
Type.GetType(“System.Int32”)

您可以使用委托调用字符串、Int32和其他构造函数。

//从刚加载的程序集中获取类计算器的类型

Type calcType=testAssembly.GetType(“Test.Calculator”)

不起作用-它必须是一个命名空间限定的类型名,以:
“System.Int32”
可以起作用,但
“Int32”
不能。
    var t = Type.GetType("System.Int32");
    var constructor = t.GetConstructor(Type.EmptyTypes);
    object intObject = constructor.Invoke(null); //intObject will have type System.Int32