Вы можете сделать это с помощью рефлексии, но, как кто-то сказал, это приведет к снижению производительности.
Поскольку вы работаете с ожидаемым дизайном класса, вы можете достичь той же цели с помощью метода расширения, например, так:
public static class MyClassExtensions
{
public static void Merge(this MyClass instanceA, MyClass instanceB)
{
if(instanceA != null && instanceB != null)
{
if(instanceB.Prop1 != null)
{
instanceA.Prop1 = instanceB.Prop1;
}
if(instanceB.PropN != null)
{
instanceA.PropN = instanceB.PropN;
}
}
}
И позже, где-то в вашем коде:
someInstanceOfMyClass.Merge(someOtherInstanceOfMyClass);
В конце дня вы централизовали эту операцию в методе расширения, и если вы добавляете или удаляете свойство вашего класса, вам нужно всего лишь изменить реализацию метода расширения, и вы все сделаете.