Search code examples
c#clonecloningcloneable

Clone an Object that I can't add ICloneable to


I am trying to create a shallow copy (new instance) of an object, without manually setting each field. This object is not a type I have the ability to modify, so I cannot go into the object and implement ICloneable ... I am a bit stuck. Is there an easy way to simply clone an object, or will I have to implement some Clone() method that simply copies each field into a new object?

Thanks in advance for any help!


Solution

  • Use reflection to look at the fields on the object and use that to populate the new instance.

    This makes some assumptions about the existence of a constructor that takes no arguments.

    Type t = typeof(typeToClone);
    var fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
    var copy = Activator.CreateInstance(t);
    for(int i = 0; i < fields.Length; i++)
      fields[i].SetValue(copy, fields[i].GetValue(existing));