fieldInfo.SetValue抛出ArgumentException“对象类型无法转换为目标类型”

时间:2009-06-05 13:24:50

标签: .net reflection

这让我疯了。也许我错过了一些明显的东西?

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(DateTime.Now),我仍然会得到异常!

3 个答案:

答案 0 :(得分: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 :(得分:0)

好的,我已经明白了。

如果您看到此异常,则您使用的FieldInfos很可能不属于与目标相同的对象。的咳嗽

非常抱歉,感谢所有帮助过的人。

答案 2 :(得分:-1)

更改

destinationField.SetValue(this, destinationValue);

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

有评论询问'this'参考,但我没有回复回复那里。