fieldInfo.SetValue, выбрасывающая ArgumentException «Тип объекта не может быть преобразован в целевой тип» - PullRequest
0 голосов
/ 05 июня 2009

Это сводит меня с ума. Возможно, я упускаю что-то очевидное?

Поле 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 ]

1 голос
/ 05 июня 2009

Я предполагаю, что вы хотите установить свойство для вашего объекта, а не поля (это может быть вашей проблемой). Если так, то следующий код может помочь?

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.

0 голосов
/ 05 июня 2009

ОК, я понял это.

Если вы когда-нибудь увидите это Исключение, есть большая вероятность, что используемые вами FieldInfos не принадлежат тому же объекту, что и ваша цель. кашель

Извините за то, что вы сгусток, спасибо всем, кто помог.

0 голосов
/ 05 июня 2009

Изменение

destinationField.SetValue(this, destinationValue);

К

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

Был комментарий, спрашивающий об этой ссылке, но мне не хватает представителя, чтобы ответить там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...