sabato 14 dicembre 2013

Clonare un oggetto tramite reflection

Classe utility per clonare un oggetto tramite reflection.

public static object CloneObject(object objSource)
{
    //step : 1 Get the type of source object and create a new instance of that type
    Type typeSource = objSource.GetType();
    object objTarget = Activator.CreateInstance(typeSource);
 
    //Step2 : Get all the properties of source object type
    PropertyInfo[] propertyInfo = typeSource.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
 
    //Step : 3 Assign all source property to taget object 's properties
    foreach (PropertyInfo property in propertyInfo)
    {
        //Check whether property can be written to
        if (property.CanWrite)
        {
            //Step : 4 check whether property type is value type, enum or string type
            if (property.PropertyType.IsValueType || property.PropertyType.IsEnum || property.PropertyType.Equals(typeof(System.String)))
            {
                property.SetValue(objTargetproperty.GetValue(objSourcenull), null);
            }
            //else property type is object/complex types, so need to recursively call this method until the end of the tree is reached
            else
            {
                object objPropertyValue = property.GetValue(objSourcenull);
                if (objPropertyValue == null)
                {
                    property.SetValue(objTargetnullnull);
                }
                else
                {
                    property.SetValue(objTargetCloneObject(objPropertyValue), null);
                }
            }
        }
    }
    return objTarget;
}

Nessun commento:

Posta un commento