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

Ani*_*ndu 5 .net c# types casting object

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

例如 -

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

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

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

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

Jon*_*eet 9

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

Type type = Type.GetType(objectName);
object x = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

需要注意的几点:

  • Type.GetType(string)除非类型在当前正在执行的程序集中,否则需要一个程序集限定的名称mscorlib
  • Activator.CreateInstance(Type)将调用无参数构造函数(必须可访问); 如果需要将参数传递给构造函数,还有其他可用的重载.


Jus*_*ner 3

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

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

var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

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