我有一个String变量,它包含一个类型例如:
String StrType ="Int32"; // Or "Decimal" Or Char Or an Enum Color
我想用类型StrType(StrType的值)制作新的变量
在这个例子中,我想要这个变量:
Int32 MyType;
我不想使用swich或if…else来检测类型,因为不是这个-->
If (StrType=="Int32")
Int32 MyType;
(另一个词是,我在StrType中有一个类型名称,我想用它创建一个新变量它键入运行时)
我能做什么?
您可能正在查找Type.GetType(StrType)
,这将为您提供一个包含相应类型的Type变量。如果你想获得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");
您可以使用委托来调用String、Int32和其他构造函数。
http://www.csharp-examples.net/reflection-examples/
// get type of class Calculator from just loaded assembly
Type calcType = testAssembly.GetType("Test.Calculator");