Comme indiqué dans de nombreuses autres réponses, les deux méthodes fonctionnent copies superficielles du tableau. Cependant, il existe des différences et des recommandations qui n'ont pas encore été abordées et qui sont mises en évidence dans les listes suivantes.
Caractéristiques de System.Array.Clone
:
- Les tests, effectués avec .NET 4.0, montrent qu'elle est plus lent que
CopyTo
probablement parce qu'il utilise Object.MemberwiseClone
;
-
Nécessite de couler le résultat au type approprié ;
- Le tableau résultant a la même longueur que la source.
Caractéristiques de System.Array.CopyTo
:
-
Est plus rapide que
Clone
lors de la copie dans un tableau du même type ;
-
Elle fait appel à
Array.Copy
hériter est une capacité étant les plus utiles :
- Peut mettre en boîte des éléments de type valeur dans des éléments de type référence, par exemple, en copiant une
int[]
dans un tableau object[]
;
- Peut décomposer les éléments de type référence en éléments de type valeur, par exemple, en copiant une
object[]
réseau de boîtes int
dans un int[]
;
- Peut effectuer des conversions d'élargissement sur les types de valeur, par exemple, en copiant un
int[]
en un long[]
.
- Les éléments descendants peuvent-ils, par exemple, copier une
Stream[]
dans un tableau MemoryStream[]
(si un élément du tableau source n'est pas convertible en MemoryStream
une exception est levée).
- Permet de copier la source vers un tableau cible dont la longueur est supérieure à celle de la source.
Notez également que ces méthodes sont mises à disposition pour soutenir ICloneable
y ICollection
Ainsi, si vous traitez des variables de type tableau, vous ne devez pas utiliser la fonction Clone
o CopyTo
et utiliser à la place Array.Copy
o Array.ConstrainedCopy
. La copie sous contrainte garantit que si l'opération de copie ne peut pas se terminer avec succès, l'état du tableau cible n'est pas corrompu.
37 votes
C'est une question d'entretien un peu stupide. "Je ne m'en souviens pas, laissez-moi vérifier la documentation..."
0 votes
@MisterDev Aucune de ces méthodes ne conservera de référence au tableau original à partir duquel vous avez copié, non.
0 votes
@Nyerguds Je pense qu'il voulait dire qu'ils gardent tous les deux des références aux objets éléments du tableau original, pas à l'objet tableau original lui-même.
1 votes
@reirab Oh, je suis conscient de ce qu'il voulait dire. Mais j'ai jugé nécessaire de souligner qu'il l'a mal dit.