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 usaObject.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 unaobject[]
; - Puede desempaquetar elementos de tipo de referencia en elementos de tipo de valor, por ejemplo, copiar un
object[]
array de cajaint
en unaint[]
; - Puede realizar conversiones de ampliación en tipos de valor, por ejemplo, copiar un
int[]
en unalong[]
. - ¿Pueden los elementos downcast, por ejemplo, copiar un
Stream[]
array en unaMemoryStream[]
(si algún elemento en la fuente array no es convertible aMemoryStream
se lanza una excepción).
- Puede encuadrar elementos de tipo de valor en elementos de tipo de referencia, por ejemplo, copiar un
- 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 ICollection
por 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.