Ошибка отражения C # - PullRequest
       0

Ошибка отражения C #

0 голосов
/ 07 марта 2012

Я новичок, когда дело доходит до размышлений, и на данный момент все это кажется довольно запутанным, так что простите, если некоторые из ваших ответов, кажется, смущают меня немного больше !!!

Я сейчаспопытка написать небольшой скрипт, который будет клонировать данные, хранящиеся в одной таблице данных, на основе значения, а затем повторно вставить эти данные в ту же таблицу, хотя и с измененным идентификатором.В настоящее время я пытаюсь использовать рефлексию, поскольку мне нужно сделать это для нескольких таблиц, и я не хочу кодировать чрезмерное количество предложений для бесчисленного количества таблиц.

Код, который я написал для отражения до сих порметод выглядит следующим образом:

public static void CopyData(object sourceObject, object targetObject) 
{
    object[] value = new object[1];
    object[] param = new object[0];

    foreach (PropertyInfo propertyInfo in sourceObject.GetType().GetProperties())
    {
        PropertyInfo targetPropertyInfo = targetObject.GetType().GetProperty(propertyInfo.Name);
        if (targetPropertyInfo.CanWrite && targetPropertyInfo.CanRead)
        {
            value[0] = propertyInfo.GetValue(sourceObject, BindingFlags.Public, null, null, null);
            targetPropertyInfo.SetValue(targetObject, value, null);
        }
    }
}

Теперь у меня нет проблем с передачей необходимых данных в этот класс, ОДНАКО я получаю следующую ошибку:

Object of type 'System.Object[]' cannot be converted to type 'System.Int32'.

Я считаю, что этобыл связан с полями Integer, используемыми для идентификации ссылок в данных.Важно, чтобы я оставил их нетронутыми для последующей обработки.

Может кто-нибудь указать мне правильное направление решения этой проблемы ????

Большое спасибо

1 Ответ

2 голосов
/ 07 марта 2012

Я предполагаю, что в этой строке выдается ошибка:

targetPropertyInfo.SetValue(targetObject, value, null);

В этой строке value - массив объектов.Я предполагаю, что это должен быть int32.Вы действительно хотите это сделать:

targetPropertyInfo.SetValue(targetObject, value[0], null);

Это будет записывать значение, которое вы только что получили из другого объекта.

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