I came across this little nugget recently and while the ability to do this has been around for quite some time in c# I found it to be very handy and wanted to share. If you have an object (class) in C# where you’d like to clone an entire reference object to another without transferring id/hash, basically achieving a by value transfer. The approach is to use the ICloneable interface on your class. Here is my base entity class which most all entity’s in my application inherit from.
[Serializable]
public class EntityBase : IEntityBase, ICloneable
{
public Guid Id { get; set; }
{
Id = Guid.NewGuid();
}public object Clone()
{
return MemberwiseClone();
}
}
Take note of the Clone() method, this is a required member of using ICloneable and it brings us to the usage for the object cloning.
MyObject origObj = querySomeRepo.FindOne<MyObject>(f => f.Id == Guid.Parse(id));
MyObject newObj = (MyObject)familyOrig.Clone();
That’s it and newObj is now a clone of the original retaining all property values without being the exact same object.
No comments:
Post a Comment