当谈到反思时,我是个新手,目前这一切似乎都很令人困惑,所以如果你的一些回复似乎让我更困惑,请原谅我!!!
我目前正在尝试编写一个小脚本,该脚本将根据一个值克隆一个数据表中的数据,然后将所述数据重新插入同一个表中,尽管ID已修改。我目前正在努力使用反射,因为我需要对多个表执行此操作,并且不希望为无数个表编写过多的子句。
到目前为止,我为反射方法编写的代码如下:
public static void CopyData(object sourceObject, object targetObject)
{
object[] value = new object[1];
object[] param = new object[0];
foreach (PropertyInfo propertyInfo in sourceObject.GetType().GetProperties())
{
PropertyInfo targetPropertyInfo = targetObject.GetType().GetProperty(propertyInfo.Name);
if (targetPropertyInfo.CanWrite && targetPropertyInfo.CanRead)
{
value[0] = propertyInfo.GetValue(sourceObject, BindingFlags.Public, null, null, null);
targetPropertyInfo.SetValue(targetObject, value, null);
}
}
}
现在,我将所需的数据传递到这个类中没有问题,但我会遇到以下错误:
Object of type 'System.Object[]' cannot be converted to type 'System.Int32'.
我认为这与用于标识数据中链接的Integer字段有关。重要的是,我要保持这些完整,以便以后处理。
有人能告诉我解决这个问题的正确方向吗????
非常感谢
我假设错误发生在这一行:
targetPropertyInfo.SetValue(targetObject, value, null);
在这一行中,value
是一个对象数组。我想它应该是一个int32。你真的打算这么做吗:
targetPropertyInfo.SetValue(targetObject, value[0], null);
这将是写你刚刚从另一个对象中得到的值。