首先,我们可能都同意最好的方法是在自定义对象/实体中实现 Copy 功能。但是考虑一下这种情况。我们没有这个选项,我们不想编写将精确复制实体的特定函数,因为将来实体将被更改,因此我们的复制函数将失败。
这是当前实体的简化版本:
[Serializable]
class MyEntity
{
public MyEntity()
{
}
public MyEntity(int id, string name)
{
this.Id = id;
this.Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
public MyEntity Copy()
{
throw new NotImplementedException();
}
}
为了满足上述所有要求,我提出了两个解决方案:
//original...
MyEntity original = new MyEntity() { Id = 1, Name = "demo1" };
//first way to copy object...
List<MyEntity> list = new List<MyEntity>() { original};
MyEntity copy1 = list.ConvertAll(entity => new MyEntity(entity.Id, entity.Name))[0];
//second way to copy object...
byte[] bytes = SerializeEntity(original);
MyEntity copy2 = (MyEntity)DeserializeData(bytes);
byte[] SerializeEntity(object data)
{
byte[] result = null;
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, data);
result = ms.ToArray();
}
return result;
}
object DeserializeData(byte[] data)
{
object result = null;
using(MemoryStream ms = new MemoryStream(data))
{
BinaryFormatter formatter = new BinaryFormatter();
result = formatter.Deserialize(ms);
}
return result;
}
现在的问题。幕后最佳解决方案是什么,为什么是第一还是第二?考虑到上述要求,有没有更好的方法来进行精确复制?将大量复制。
PS注意: 我知道第一种方式基本上已经是Honza指出的复制功能。我有点像序列化和自定义复制功能一样快的东西。