2009-06-05 86 views
0

這使我發瘋。也許我錯過了一些明顯的東西?fieldInfo.SetValue拋出ArgumentException「對象類型不能轉換爲目標類型」

fieldInfo.FieldType是正確的(DateTime),我正在應用的值也是DateTime。

for(int i=0; i<objectArray.Length; i++) 
{ 
    FieldInfo destinationField = GetFieldInfo(i); 
    object destinationValue = objectArray[i]; 

    destinationField.SetValue(this, destinationValue); 
} 

編輯:即使我設置destinationValue的字面日期時間(DateTime.Now),我仍然得到例外!

+0

你可以發佈一些有問題的代碼嗎? – Kane 2009-06-05 13:27:12

+0

您的代碼無法編譯,因爲GetFieldInfo([i])不是有效的C#。你可以顯示真實的代碼,也可以在SetValue()調用之前添加以下行:Console.WriteLine(destinationField.FieldType +「,」+ destinationValue.GetType()) – 2009-06-05 13:36:34

+0

@activa ..感謝您的迴應。我認爲最好發佈一個簡化版本。您的Console.WriteLine將返回System.DateTime,對象 – 2009-06-05 13:40:58

回答

0

好的,我已經想通了。

如果您曾經看到過這個例外,那麼您使用的FieldInfos很可能不屬於與您的目標相同的對象。 咳嗽

對不起,因爲所有幫助過的人都是血塊。

1

我假設你想在你的對象上設置一個屬性而不是一個字段(這可能是你的問題)。如果是這樣,那麼下面的代碼可能有幫

public class Order 
{ 
    public DateTime OrderDateField; 
    public DateTime OrderDate { get; set; } 
} 

object[] orders = new[] { new Order(), new Order(), new Order() }; 
for (int i = 0; i < orders.Length; i++) 
{ 
    FieldInfo fieldInfo = orders[i].GetType().GetField("OrderDateField"); 
    fieldInfo.SetValue(orders[i], DateTime.Now); 

    PropertyInfo propertyInfo = orders[i].GetType().GetProperty("OrderDate"); 
    propertyInfo.SetValue(orders[i], DateTime.Now, null); 
} 

這是你試圖達到的結果嗎?

更新:上面的代碼更新Order對象上的屬性和字段。

-1

變化

destinationField.SetValue(this, destinationValue); 

destinationField.SetValue(objectArray[i], destinationValue); 

有評論問的是 '這個' 引用,但我缺乏代表回答有。

相關問題