Export (0) Print
Expand All

Array.Clone Method

Creates a shallow copy of the Array.

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

public Object Clone ()
public final Object Clone ()
public final function Clone () : Object

Return Value

A shallow copy of the Array.

A shallow copy of an Array copies only the elements of the Array, whether they are reference types or value types, but it does not copy the objects that the references refer to. The references in the new Array point to the same objects that the references in the original Array point to.

In contrast, a deep copy of an Array copies the elements and everything directly or indirectly referenced by the elements.

The clone is of the same Type as the original Array.

This method is an O(n) operation, where n is Length.

The following code example clones a System.Globalization.CultureInfo array and demonstrates the behavior of a shallow copy.

using System;
using System.Globalization;
public class SamplesArray  {

   public static void Main()  {

      // Create and initialize a new CultureInfo array.
      CultureInfo ci0 = new CultureInfo( "ar-SA", false );
      CultureInfo ci1 = new CultureInfo( "en-US", false );
      CultureInfo ci2 = new CultureInfo( "fr-FR", false );
      CultureInfo ci3 = new CultureInfo( "ja-JP", false );
      CultureInfo[] arrCI = new CultureInfo[] { ci0, ci1, ci2, ci3 };

      // Create a clone of the CultureInfo array.
      CultureInfo[] arrCIClone = (CultureInfo[]) arrCI.Clone();

      // Replace an element in the clone array.
      CultureInfo ci4 = new CultureInfo( "th-TH", false );
      arrCIClone[0] = ci4;

      // Display the contents of the original array.
      Console.WriteLine( "The original array contains the following values:" );
      PrintIndexAndValues( arrCI );

      // Display the contents of the clone array.
      Console.WriteLine( "The clone array contains the following values:" );
      PrintIndexAndValues( arrCIClone );

      // Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
      Console.WriteLine( "Before changes to the clone:" );
      Console.WriteLine( "   Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI[3].Name, arrCI[3].DateTimeFormat.DateSeparator );
      Console.WriteLine( "      Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone[3].Name, arrCIClone[3].DateTimeFormat.DateSeparator );

      // Replace the DateTimeFormatInfo.DateSeparator for the fourth element in the clone array.
      arrCIClone[3].DateTimeFormat.DateSeparator = "-";

      // Display the DateTimeFormatInfo.DateSeparator for the fourth element in both arrays.
      Console.WriteLine( "After changes to the clone:" );
      Console.WriteLine( "   Original: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCI[3].Name, arrCI[3].DateTimeFormat.DateSeparator );
      Console.WriteLine( "      Clone: The DateTimeFormatInfo.DateSeparator for {0} is {1}.", arrCIClone[3].Name, arrCIClone[3].DateTimeFormat.DateSeparator );

   }

   public static void PrintIndexAndValues( Array myArray )  {
      for ( int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++ )
         Console.WriteLine( "\t[{0}]:\t{1}", i, myArray.GetValue( i ) );
   }

}


/* 
This code produces the following output.

The original array contains the following values:
        [0]:    ar-SA
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
The clone array contains the following values:
        [0]:    th-TH
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
Before changes to the clone:
   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
After changes to the clone:
   Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.

*/


import System.*;
import System.Globalization.*;

public class SamplesArray
{
    public static void main(String[] args)
    {
        // Create and initialize a new CultureInfo array.
        CultureInfo ci0 = new CultureInfo("ar-SA", false);
        CultureInfo ci1 = new CultureInfo("en-US", false);
        CultureInfo ci2 = new CultureInfo("fr-FR", false);
        CultureInfo ci3 = new CultureInfo("ja-JP", false);
        CultureInfo arrCI[] = new CultureInfo[] { ci0, ci1, ci2, ci3 };
        // Create a clone of the CultureInfo array.
        CultureInfo arrCIClone[] = (CultureInfo[])arrCI.Clone();
        // Replace an element in the clone array.
        CultureInfo ci4 = new CultureInfo("th-TH", false);
        arrCIClone.set_Item(0, ci4);
        // Display the contents of the original array.
        Console.WriteLine("The original array contains the following values:");
        PrintIndexAndValues(arrCI);
        // Display the contents of the clone array.
        Console.WriteLine("The clone array contains the following values:");
        PrintIndexAndValues(arrCIClone);
        // Display the DateTimeFormatInfo.DateSeparator for the fourth element
        // in both arrays.
        Console.WriteLine("Before changes to the clone:");
        Console.WriteLine("   Original: The DateTimeFormatInfo.DateSeparator " 
            + "for {0} is {1}.", arrCI[3].get_Name(),
            arrCI[3].get_DateTimeFormat().get_DateSeparator());
        Console.WriteLine("      Clone: The DateTimeFormatInfo.DateSeparator " 
            + "for {0} is {1}.", arrCIClone[3].get_Name(),
            arrCIClone[3].get_DateTimeFormat().get_DateSeparator());
        // Replace the DateTimeFormatInfo.DateSeparator for the fourth element
        // in the clone array.
        arrCIClone[3].get_DateTimeFormat().set_DateSeparator("-");
        // Display the DateTimeFormatInfo.DateSeparator for the fourth element
        // in both arrays.
        Console.WriteLine("After changes to the clone:");
        Console.WriteLine("   Original: The DateTimeFormatInfo.DateSeparator " 
            + "for {0} is {1}.", arrCI[3].get_Name(),
            arrCI[3].get_DateTimeFormat().get_DateSeparator());
        Console.WriteLine("      Clone: The DateTimeFormatInfo.DateSeparator " 
            + "for {0} is {1}.", arrCIClone[3].get_Name(),
            arrCIClone[3].get_DateTimeFormat().get_DateSeparator());
    } //main

    public static void PrintIndexAndValues(Array myArray)
    {
        for (int i = myArray.GetLowerBound(0);
            i <= myArray.GetUpperBound(0); i++) {
            Console.WriteLine("\t[{0}]:\t{1}", System.Convert.ToString(i),
                myArray.GetValue(i));
        }
    } //PrintIndexAndValues 
} //SamplesArray

/* 
    This code produces the following output.
    The original array contains the following values:
        [0]:    ar-SA
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
    The clone array contains the following values:
        [0]:    th-TH
        [1]:    en-US
        [2]:    fr-FR
        [3]:    ja-JP
    Before changes to the clone:
    Original: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
      Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is /.
    After changes to the clone:
    Original: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
    Clone: The DateTimeFormatInfo.DateSeparator for ja-JP is -.
*/

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Framework

Supported in: 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 2.0, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft