2009-09-10 46 views
3

C#中有一种方法可以基于字符串转换对象吗?基于字符串的动态转换

例,

String typeToCast = control.GetType().Name; 

Button b = (typeToCast)control; 
+2

说实话,那样铸件就没有意义。你没有理由这样做。 – waqasahmed

+1

我有一个指定类型的文件来创建。我可以硬编码检查并创建这些对象,但我正在寻找更优雅的方式。 –

回答

3

不,你不能这样做。此外,你会实现,因为你必须把它分配给“静态”,在您的情况,它的按钮 - 那为什么不投它通常为:

Button b = (Button)control;

您可以hovewer,检查你的控制一类:

Type t = TypeFromString(name); 
bool isInstanceOf = t.IsInstanceOfType(control); 

编辑: ,而不必键入它在编译的时候,你可以使用Activator类创建一个对象:

object obj = Activator.CreateInstance(TypeFromString(name)); 
Button button = (Button)obj; //Cast to compile-time known type. 
+0

那么,你应该问问你是否可以创建一个对象,它是类型的名称 - 是的,你可以。 –

7

当然可以,但你不应该。

Csharp的

string value = "2.5"; 
object typedObject; 
typedObject = Convert.ChangeType(value, Type.GetType("System.Double")); 

Vbnet

Dim value As String = "2.5" 
Dim typedObject As Object 
typedObject = Convert.ChangeType(value, Type.GetType("System.Double"))