根据C#中传递的字符串值将对象转换为类型

时间:2011-06-03 17:28:50

标签: c# .net object types casting

我有一个要求,即对象类型[对象的名称]作为字符串变量传递。现在基于传递的对象名称,我需要创建该对象类型。请注意,字符串值包含确切的对象类型名称。我编写了一个代码片段,但它抛出异常。

例如 -

string objectName = "EntityTest.Entity.OrderEntity";//Entity type name
object obj = new object();
object newobj = new object();
newobj = Convert.ChangeType(obj, Type.GetType(objectName));

我这样做我得到错误 - > Object must implement IConvertible.

我的实体OrderEntity已经实现了IConvertible界面。

非常感谢任何帮助/建议。有没有其他方法可以创建对象来满足我的要求。

2 个答案:

答案 0 :(得分:9)

您目前正在尝试转换现有对象,而不是创建一个正确的类型。假设您的Type.GetType来电正常,您可以使用:

Type type = Type.GetType(objectName);
object x = Activator.CreateInstance(type);

需要注意几点:

  • Type.GetType(string)需要一个程序集限定名称​​,除非该类型位于当前正在执行的程序集中,或mscorlib
  • Activator.CreateInstance(Type)将调用无参数构造函数(必须可访问);如果需要将参数传递给构造函数,则可以使用other overloads

答案 1 :(得分:3)

您的问题是您正在创建object的实例,然后尝试将其转换为更具体的类型(它不可能)。

您需要一种方法来调用您尝试创建的类型的默认构造函数。看看Activator.CreateInstance()

var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);

如果类型没有默认构造函数,则上面的示例将失败。在这种情况下,你最好的选择可能是use this overload(它将一组对象用作构造函数参数,然后尝试找到最佳匹配)