using System; using System.Reflection; public class Program { public static void Main() { var objeto = new Tipo() { x = 1, a = "aaa" }; var objeto2 = ObjectUtil.Clone(objeto); Console.WriteLine(objeto2.x); } } static class ObjectUtil { public static T Clone(T obj) { Type type = obj.GetType(); var fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); var cloned = Activator.CreateInstance(type); for (int i = 0; i < fields.Length; i++) fields[i].SetValue(cloned, fields[i].GetValue(obj)); return (T)cloned; } } class Tipo { public int x; public string a; public TimeZoneInfo t; } //https://pt.stackoverflow.com/q/177137/101