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