可以使用字符串在C#中声明类型吗?
而不是:
MyType foo = bar;
你会有一个“MyType”字符串。
string typeString = "MyType";
TypeOftypeString foo = bar;
显然我不知道这样做的正确方法。所以上面的例子只是传达我的想法的一种方式。
在Unity3D中,我可以在运行时将字符串设置为特定值。我可以使用该字符串来定义类型吗?即使这最终成为我的代码中不合逻辑的追求,这可能吗?如果是这样,你怎么去呢?
编辑:扩大我说的话。 MyType是应用程序中的一个类。我也有MyOtherType和MyDifferantType。我希望能够将该字符串设置为“MyType”或“MyOtherType”,然后将该对象的已创建实例分配给该字段。我试图避免一个非常长的if-else链或switch()语句,其中我为对象可能遇到的每种类型创建一个案例,即使在运行时之前设置字符串时预先确定了该类型。
如果这看起来像个傻瓜差事,请告诉我。
答案 0 :(得分:2)
这应该是一个解决方案:
var yourType= "yourType";
var theType = TheType.GetType(yourType, true);
var variable = (yourTypeCast)Activator.CreateInstance(yourType);
答案 1 :(得分:1)
如果我理解正确,您希望基于字符串中的名称实例化一个类。这是一种方法。
var typeName = "someType";
var type = Type.GetType(typeName, true);
var instanceOfType = (someInterfaceCast)Activator.CreateInstance(type); //I like to use an interface cast here
更新:就像上面提到的一些评论一样,如果你能避免这条路,最好这样做。