まず第一に、私たちはおそらく、カスタムオブジェクト/エンティティ内にコピー機能を実装することが最善の方法であることに同意します。しかし、このシナリオを考えてみましょう。このオプションはありません。エンティティは将来変更されるため、コピー機能が失敗するため、エンティティの正確なコピーを作成する特定の関数を記述したくありません。
現在のエンティティの簡略版は次のとおりです。
[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();
}
}
上記のすべての要件をカバーするために、私は2つの解決策を考え出しました。
//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;
}
そして今、質問です。舞台裏で最も最適なソリューションはどれですか。また、その理由は、最初か2番目ですか。上記の要件を考慮して正確なコピーを行うためのより良い方法はありますか?コピーは大量に行われます。
PS注: 本座が指摘したように、最初の方法は基本的にすでにコピー機能であることを認識しています。私は、シリアル化のように用途が広く、カスタムコピー機能のように高速に近いものを探しています。