Я пытаюсь скопировать некоторые значения свойств из одного объекта в другой (оба объекта реализуют 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) возвращает ожидаемое значение.
Может кто-нибудь объяснить, что я делаю неправильно?Не стесняйтесь предлагать совершенно альтернативный подход, если это будет более подходящим решением.