代码之家  ›  专栏  ›  技术社区  ›  James L

fieldinfo.setvalue引发ArgumentException“对象类型无法转换为目标类型”

  •  0
  • James L  · 技术社区  · 15 年前

    这让我发疯。也许我遗漏了一些明显的东西?

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   Kane    15 年前

    我假设您希望在对象上设置一个属性,而不是字段(这可能是您的问题)。如果是这样,那么下面的代码可能有帮助?

    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对象的属性和字段。

        2
  •  0
  •   James L    15 年前

    好吧,我已经知道了。

    如果您曾经看到过这个异常,那么您使用的FieldInfos很可能与您的目标不属于同一个对象。 咳嗽

    很抱歉是血栓,感谢所有帮助过的人。

        3
  •  -1
  •   Kleinux    15 年前

    变化

    destinationField.SetValue(this, destinationValue);
    

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

    有人对“这个”的引用提出了评论,但我没有代表在那里回复。