C# 基于字符串的动态铸造

C# 基于字符串的动态铸造,c#,casting,C#,Casting,在C#中是否有一种基于字符串强制转换对象的方法 例如 String typeToCast = control.GetType().Name; Button b = (typeToCast)control; 不,你不能那样做。另外,您将实现什么,因为您必须将其分配给“静态”类型,在您的情况下,它是按钮-所以为什么不正常地强制转换它: Button b = (Button)control; 您可以使用浏览器,检查控件是否属于以下类型: Type t = TypeFromString(name);

在C#中是否有一种基于字符串强制转换对象的方法

例如

String typeToCast = control.GetType().Name;

Button b = (typeToCast)control;

不,你不能那样做。另外,您将实现什么,因为您必须将其分配给“静态”类型,在您的情况下,它是按钮-所以为什么不正常地强制转换它:

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.

是的,你可以,但你不应该

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