jueves, 14 de febrero de 2013

Clone Generic Object by Reflection in .NET


public static List GetAllProperties(Type type)
{
    BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly;
    var list = new List();

    if (type != null)
    {
        list.AddRange(type.GetProperties(flags));
        list.AddRange(GetAllProperties(type.BaseType));
    }

    return list;
}

public static T Clonar(T original)
{
    if (original == null) { throw new Exception("cannot be null object"); }

    var tipo = original.GetType();
    var resultado = Activator.CreateInstance(tipo);
    foreach (PropertyInfo propiedad in GetAllProperties(tipo))
    {
        propiedad.SetValue(resultado, propiedad.GetValue(original, null), null);
    }
    return (T)resultado;
}

No hay comentarios:

Publicar un comentario