Почему SetValue Reflection выбрасывает исключение? - PullRequest
1 голос
/ 25 января 2012

Я пытаюсь скопировать некоторые значения свойств из одного объекта в другой (оба объекта реализуют IVenue, но объект b должен динамически удалять некоторые значения).Желая избежать большого количества кода, такого как:

a.Property1 = b.Property1;
a.Property2 = b.Property2;
etc

Я пытаюсь использовать Reflection для зацикливания свойств и копирования по:

public VenueContract(TVDData.Interfaces.IVenue v, List<TVDData.APIClientPermittedFields> permittedFields)
{
    PropertyInfo[] Properties = this.GetType().GetProperties( BindingFlags.Public | BindingFlags.Instance);
    foreach (PropertyInfo p in Properties)
    {
        PropertyInfo source = v.GetType().GetProperty(p.Name, BindingFlags.Public | BindingFlags.Instance);
        p.SetValue (p, source.GetValue(v,null),null);
    }
}

Однако я получаю ошибку:

"Объект не соответствует целевому типу"

Оба свойства имеют тип int, объявленный как:

public int ID { get; set; }

Кажется, проблема заключается в p.SetValue as source.GetValue (v, null) возвращает ожидаемое значение.

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

1 Ответ

4 голосов
/ 25 января 2012

Ваш первый аргумент для SetValue неверен - он пытается установить свойство для PropertyInfo.

Возможно, вы имели в виду:

 p.SetValue(this, source.GetValue(v, null), null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...