Copy an array into another array.
#region License and Copyright /* * Dotnet Commons Reflection * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the * Free Software Foundation, Inc., * 59 Temple Place, * Suite 330, * Boston, * MA 02111-1307 * USA * */ #endregion using System; using System.Collections; using System.IO; using System.Reflection; using System.Runtime.Serialization.Formatters.Binary; using System.Text; namespace Dotnet.Commons.Reflection { /// ----------------------------------------------------------------------- /// <summary> /// This utility class contains a rich sets of utility methods that perform operations /// on objects during runtime such as copying of property and field values /// between 2 objects, deep cloning of objects, etc. /// </summary> /// ----------------------------------------------------------------------- public abstract class ObjectUtils { /// ------------------------------------------------------------------------ /// <summary> /// Copy an array into another array. /// </summary> /// <param name="src">source array</param> /// <param name="dest">destination array</param> /// <returns>copied array</returns> /// ------------------------------------------------------------------------ public static object[] CopyArray(object[] src, object[] dest) { for (int i = 0; i < src.Length; i++) { Type ICloneType = src[i].GetType().GetInterface( "ICloneable" , true ); MemberInfo[] mi = src[i].GetType().GetMember("Clone"); if (src[i].GetType().IsPrimitive) dest[i] = src[i]; // reference type else if( ICloneType != null ) { //Getting the ICloneable interface from the object. ICloneable IClone = (ICloneable)src[i]; dest[i] = IClone.Clone(); } else if ((mi != null) && (mi.Length > 0)) { dest[i] = src[i].GetType().InvokeMember("Clone", BindingFlags.InvokeMethod, null, src[i],null); } else // copy reference dest[i] = src[i]; } return dest; } } }