Вы можете использовать сериализацию, чтобы сделать копию довольно легко, создавая SerializationBinder. Это позволит вам десериализоваться от одного типа к другому.
class MySerializationBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
Type typeToDeserialize = null;
// To return the type, do this:
if(typeName == "TypeToConvertFrom")
{
typeToDeserialize = typeof(TypeToConvertTo);
}
return typeToDeserialize;
}
}
Пока свойства типа выстраиваться вы можете использовать это, чтобы сериализовать От типа, а затем десериализации в Чтобы ввести с помощью BinaryFormatter и установив свойство Binder к экземпляру вашего класса связующего. Если у вас есть несколько типов объектов, вы можете использовать один Binder для покрытия всех разных типов.
Отражение - это еще один вариант, который вы можете решить, чтобы решить эту проблему. Если имена свойств точно совпадают, вы можете написать простой метод, который принимает значения из одного свойства и присваивает свойство с тем же именем.
public static void CopyObject(object source, object destination)
{
var props = source.GetType().GetProperties();
foreach (var prop in props)
{
PropertyInfo info = destination.GetType().GetProperty(prop.Name);
if (info != null)
{
info.SetValue(destination, prop.GetValue(source, null), null);
}
}
}
Как это произошло? Как вы закончили с двумя классами, описывающими одну и ту же таблицу? –