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
界面.
非常感谢任何帮助/建议.有没有其他方法可以创建对象来满足我的要求.
您当前正在尝试转换现有对象,而不是创建一个正确的类型.假设您的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)
将调用无参数构造函数(必须可访问); 如果需要将参数传递给构造函数,还有其他可用的重载.您的问题是您正在创建一个实例object
,然后尝试将其转换为更具体的类型(它不能是)。
您需要一种方法来调用您要创建的类型的默认构造函数。看一眼Activator.CreateInstance()
:
var type = Type.GetType(typeName);
var instance = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
如果该类型没有默认构造函数,则上面的示例将失败。在这种情况下,最好的选择可能是使用此重载(它采用对象数组作为构造函数参数,然后尝试找到最佳匹配)
归档时间: |
|
查看次数: |
3195 次 |
最近记录: |