小编San*_*mal的帖子

使用反射在运行时C#类型转换

从这个问题的标题来看,我想要做的事情可能是不可能的,所以我会描述我在做什么,你可以随时让我知道我做错了什么以及什么是更好的方法来完成我的目标.

我有一个XML文件,它描述了1)一个基类型派生的自定义对象,以及2)内部字段名称和相关值.这些派生对象可能具有基类不了解的其他字段.

我将对象的类型提取为字符串,并将所有对象数据放入字典中,其中键是字段名称,值是字段的值.我使用字符串名称和对象的默认构造函数来实例化对象.我可以将所有对象的属性嗅探到PropertyInfo []中.现在我需要获取字符串形式的所有值并将它们转换为正确的数据类型,以便我可以将它们加载到对象的属性中.(当我输入它时,听起来我正在采取一种保存状态并恢复它,但我只听说过这种情况.如果你想按照这些方式提出建议,那么请记住我无法读取XML文件中的数据,我无法改变它.)

我可以将所有字符串值转换为Type对象给出的类型,并使用我具有以下定义的暴力函数:

public object convertMe(string v, Type t)
Run Code Online (Sandbox Code Playgroud)

由于我不知道我在该函数中抛出了什么类型,我不知道回来了什么,我无法将对象明确地转换为适当的类型以分配给上述属性.我一直在尝试以下类型的演员无济于事:

string objectType = /*read type string from XML*/;

... // Wherein I instantiate an object "theObject" and get PropertyInfo[] from it.
... // I also make sure that I'm trying to assign the correct data to
... // the correct property.

Type t = currentProperty.PropertyType;
object o = convertMe(value, Type.GetType(qtype));
currentProperty.SetValue(theObject, (t)o, null);  // Doesn't work
currentProperty.SetValue(theObject, (t)Convert.ChangeType(o, …
Run Code Online (Sandbox Code Playgroud)

c# casting dynamic

9
推荐指数
2
解决办法
9733
查看次数

标签 统计

c# ×1

casting ×1

dynamic ×1