2012-03-07 66 views
0

我是個新手,當涉及到的反射和此刻這一切似乎相當混亂所以原諒我,如果你的一些答覆似乎混淆我多一點!C#反思錯誤

目前,我想要寫一個小腳本,將基於值複製一個數據表中保存的數據,然後重新插入所述數據到相同的表,儘管經修訂的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'. 

我相信這與整數字段用來識別數據中的鏈接。重要的是我保持這些完好無損,以便日後處理。

可有人請點我的方式來解決這個問題的正確方向????

非常感謝

回答

2

我假設錯誤是在這條線拋出:

targetPropertyInfo.SetValue(targetObject, value, null); 

在這一行value是一個對象陣列。我認爲它應該是一個int32。你其實是這麼做的:

targetPropertyInfo.SetValue(targetObject, value[0], null); 

這將寫入你剛剛從其他對象中獲得的值。

+0

曾爲許多完美的感謝! – Callum 2012-03-07 11:32:46

+0

@Callum:只是爲了幫助你調試技能一旦錯誤想出了你應該檢查它指向行,然後苦苦思索什麼涉及的類型爲。 'value'有型的唯一對象'對象[]'所以你可以告訴你的是罪魁禍首,從此你可能已經注意到你的錯誤。在這種情況下,'value'並不需要是一個'object'數組,但我認識到你可能有其他的代碼被修剪過,這個問題使用了這個數組(實際上'param'沒有被使用)。 – Chris 2012-03-07 11:38:19