Адаптация dahlbyk принята ответ , я закончил тем, что использовал следующее в конструкторе, который принял базовый тип и должен был отражать содержимое:
var thisType = this.GetType();
foreach (var prop in baseObj.GetType().GetProperties()
.Where(p => thisType.GetProperty(p.Name) != null))
{
var propGetter = prop.GetGetMethod();
var propSetter = thisType.GetProperty(prop.Name).GetSetMethod();
if (propSetter != null)
propSetter.Invoke(this, new[] { propGetter.Invoke(baseObj, null) });
}
По сути, пошагово просматривайте каждое свойство в типе baseObj
, где тип this
имеет свойство с соответствующим именем, и найдите метод get
для типа baseObj
, а также set
.метод для соответствующего именованного свойства типа this
, и если в this
доступен метод set
, вызовите его, используя метод, возвращенный при вызове метода get
для типа baseObj
.
Хорошо работает для открытых и закрытых свойств любого (подходящего) типа для обоих типов.
Примечание. Вам потребуется ссылка на System.Linq
для функции .Where()
в цикле