Question

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!

Was it helpful?

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));
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top