2009-06-05 80 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); 

有评论问的是 '这个' 引用,但我缺乏代表回答有。

相关问题