基于字符串的动态强制转换

时间:2009-09-10 00:01:56

标签: c# casting

C#中是否有基于字符串转换对象的方法?

实施例,

String typeToCast = control.GetType().Name;

Button b = (typeToCast)control;

2 个答案:

答案 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"))

答案 1 :(得分:3)

不,你不能这样做。此外,你会实现什么,因为你必须将它分配给“静态”类型,在你的情况下,它是按钮 - 所以为什么不正常投射:

Button b = (Button)control;

你可以嘘声,检查你的控件是否是一种类型:

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.