multidimensional initialize inicializar example declarar array c# arrays copy

initialize - multidimensional array c#



Copia una matriz de cadenas a otra (3)

Asigne espacio para la matriz de destino, que utiliza Array.CopyTo ():

targetArray = new string[sourceArray.Length]; sourceArray.CopyTo( targetArray, 0 );

¿Cómo puedo copiar una string[] de otra string[] ?

Supongamos que tengo una string[] args . ¿Cómo puedo copiarlo en otra string[] args1 matriz string[] args1 ?


Las respuestas anteriores muestran un clon superficial; así que pensé que agregué un ejemplo de clonación profunda usando serialización; Por supuesto, también se puede hacer un clon profundo haciendo un bucle a través de la matriz original y copiar cada elemento en una nueva matriz.

private static T[] ArrayDeepCopy<T>(T[] source) { using (var ms = new MemoryStream()) { var bf = new BinaryFormatter{Context = new StreamingContext(StreamingContextStates.Clone)}; bf.Serialize(ms, source); ms.Position = 0; return (T[]) bf.Deserialize(ms); } }

Probando el clon profundo:

private static void ArrayDeepCloneTest() { //a testing array CultureInfo[] secTestArray = { new CultureInfo("en-US", false), new CultureInfo("fr-FR") }; //deep clone var secCloneArray = ArrayDeepCopy(secTestArray); //print out the cloned array Array.ForEach(secCloneArray, x => Console.WriteLine(x.DateTimeFormat.DateSeparator)); //modify the original array secTestArray[0].DateTimeFormat.DateSeparator = "-"; Console.WriteLine(); //show the (deep) cloned array unchanged whereas a shallow clone would reflect the change... Array.ForEach(secCloneArray, x => Console.WriteLine(x.DateTimeFormat.DateSeparator)); }


  • Para crear una matriz completamente nueva con el mismo contenido (como una copia superficial): llame a Array.Clone y simplemente lance el resultado.
  • Para copiar una parte de una matriz de cadenas en otra matriz de cadenas: llame a Array.Copy o Array.CopyTo

Por ejemplo:

using System; class Test { static void Main(string[] args) { // Clone the whole array string[] args2 = (string[]) args.Clone(); // Copy the five elements with indexes 2-6 // from args into args3, stating from // index 2 of args3. string[] args3 = new string[5]; Array.Copy(args, 2, args3, 0, 5); // Copy whole of args into args4, starting from // index 2 (of args4) string[] args4 = new string[args.Length+2]; args.CopyTo(args4, 2); } }

Asumiendo que comenzamos con args = { "a", "b", "c", "d", "e", "f", "g", "h" } los resultados son:

args2 = { "a", "b", "c", "d", "e", "f", "g", "h" } args3 = { "c", "d", "e", "f", "g" } args4 = { null, null, "a", "b", "c", "d", "e", "f", "g", "h" }