Mega Code Archive

 
Categories / C# / Collections Data Structure
 

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;     }     } }