Saltar al contenido

Diferencia entre System.Array.CopyTo() y System.Array.Clone()

Queremos compartir contigo la mejor solución que encontramos en todo internet. Nosotros deseamos que te sea útil y si puedes compartir alguna mejora hazlo con total libertad.

Solución:

Él Clon() método devuelve un nuevo array (una copia superficial) objeto que contiene todos los elementos del original array. Él Copiar a() método copia los elementos en otro existente array. Ambos realizan una copia superficial. Una copia superficial significa que el contenido (cada uno array elemento) contiene referencias al mismo objeto que los elementos en el original array. Una copia profunda (que ninguno de estos métodos realiza) crearía una nueva instancia del objeto de cada elemento, lo que daría como resultado un objeto diferente pero idéntico.

Entonces la diferencia son:

1- CopyTo require to have a destination array when Clone return a new array.
2- CopyTo let you specify an index (if required) to the destination array.

Editar:

Eliminar el ejemplo equivocado.

Otra diferencia no mencionada hasta ahora es que

  • con Clone() el destino array no es necesario que exista todavía ya que se crea uno nuevo desde cero.
  • con CopyTo() no solo el destino array ya debe existir, debe ser lo suficientemente grande como para contener todos los elementos en la fuente array del índice que especifique como destino.

Como se indica en muchas otras respuestas, ambos métodos realizan copias superficiales del array. Sin embargo, existen diferencias y recomendaciones que aún no se han abordado y que se destacan en las siguientes listas.

Características de System.Array.Clone:

  • Las pruebas, utilizando .NET 4.0, muestran que es más lento que CopyTo probablemente porque usa Object.MemberwiseClone;
  • Requiere lanzar el resultado. al tipo apropiado;
  • La resultante array tiene la misma longitud que la fuente.

Características de System.Array.CopyTo:

  • es más rápido que Clone al copiar a array del mismo tipo;
  • llama a Array.Copy heredar es capacidadessiendo los más útiles:
    • Puede encuadrar elementos de tipo de valor en elementos de tipo de referencia, por ejemplo, copiar un int[] array en una object[];
    • Puede desempaquetar elementos de tipo de referencia en elementos de tipo de valor, por ejemplo, copiar un object[] array de caja int en una int[];
    • Puede realizar conversiones de ampliación en tipos de valor, por ejemplo, copiar un int[] en una long[].
    • ¿Pueden los elementos downcast, por ejemplo, copiar un Stream[] array en una MemoryStream[] (si algún elemento en la fuente array no es convertible a MemoryStream se lanza una excepción).
  • Permite copiar la fuente a un destino array que tiene una longitud mayor que la fuente.

También tenga en cuenta que estos métodos están disponibles para apoyar ICloneable y ICollectionpor lo que si se trata de variables de array tipos que no debes usar Clone o CopyTo y en su lugar usar Array.Copy o Array.ConstrainedCopy. La copia restringida asegura que si la operación de copia no puede completarse con éxito, entonces el objetivo array el estado no se corrompe.

Reseñas y calificaciones de la guía

Te invitamos a añadir valor a nuestro contenido informacional cooperando tu experiencia en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *