Fermer

mars 5, 2019

Copie et clonage de tableaux en C #


Apprenez à copier des éléments d'un tableau à un autre à l'aide des fonctions fournies dans la classe System.Array

Un tableau en C # est une collection d'éléments de données, tous du même type et accessibles à l'aide d'un index numérique. La classe Array fournit des méthodes de création, de manipulation, de recherche et de tri de tableaux en .NET. Dans certains cas, vous souhaiterez utiliser un nouveau tableau mais y copier des éléments d'un tableau existant ou copier des éléments d'un tableau dans un autre. Je vais vous montrer comment faire cela en utilisant certaines des méthodes disponibles dans la classe Array.

Array.CopyTo

Array.CopyTo copie tous les éléments du tableau actuel dans le tableau de destination spécifié. Cette méthode doit être appelée à partir du tableau source et nécessite deux paramètres. Le premier est le tableau que vous voulez copier, et le second paramètre lui indique quel index du tableau de destination il doit commencer à copier. Voyons un exemple.

 var source = new [] {"Ally", "Bishop", "Billy"};
var target = nouvelle chaîne [4];

source.CopyTo (cible, 1);
foreach (article var dans la cible)
{
  Console.WriteLine (item);
}

// sortie:

// allié
// évêque
// Billy

Le code ci-dessus copie tous les éléments du tableau source dans le tableau cible. Il copie les éléments de l'objet source vers l'objet tableau cible à partir de l'index 1 ; Par conséquent, l'index 0 du tableau cible est nul.

Array.ConstrainedCopy

Array.ConstrainedCopy est similaire à Array.CopyTo . La différence est que Array.ConstrainedCopy garantit que toutes les modifications sont annulées si l'opération de copie n'aboutit pas complètement à cause d'une exception. Voici un exemple du comportement de Array.CopyTo lorsqu’il rencontre une exception.

 var source = nouvel objet [] {"Ally", "Bishop", 1};
var target = nouvelle chaîne [3];

essayer
{
  source.CopyTo (cible, 0);
}
catch (InvalidCastException)
{
  foreach (élément var dans la cible)
  {
    Console.WriteLine (element);
  }
}

Console.Read ();

// sortie:

// allié
// évêque

Ci-dessus, nous avons un tableau source qui contient des éléments de type chaîne et type d'objet. Nous copions le contenu du tableau source dans un tableau cible, qui est un type de chaîne. Lorsque ce code est exécuté, il rencontre une InvalidCastException lorsqu’il essaie de copier le dernier élément, qui ne correspond pas au type du tableau cible. L’opération de copie échoue à ce stade, mais le tableau cible contient déjà une partie de l’élément du tableau source issu de ce que nous voyons imprimé dans la console. Essayons un exemple similaire avec ConstrainedCopy :

 var source = nouvel objet [] {"Ally", "Bishop", 1};
var target = nouvelle chaîne [3];

essayer
{
  Array.ConstrainedCopy (source, 0, cible, 0, 3);
}
catch (ArrayTypeMismatchException)
{
  Console.WriteLine (target [0]);
  Console.WriteLine (target [1]);
}

Console.Read ();

Array.ConstrainedCopy prend cinq (5) paramètres: le tableau source et son index de départ, le tableau cible et son index de départ, ainsi qu'un entier représentant le nombre d'éléments à copier. Lorsque le code ci-dessus est exécuté, il rencontre une exception et, lorsque vous vérifiez le contenu du tableau cible, vous remarquerez qu'il ne contient rien, contrairement à Array.CopyTo .

Array.ConvertAll

Array.ConvertAll est utilisé pour convertir un tableau d'un type en un tableau d'un type différent. La méthode prend le tableau source comme premier paramètre, puis un deuxième paramètre de délégué Converter . Ce délégué représente une fonction de conversion permettant de convertir un type en un autre.

Supposons la classe suivante:

 class Person
{
  personne publique (nom de chaîne)
  {
    Nom = nom;
  }
  chaîne publique Nom {get; ensemble privé; }
}

Voici un exemple de Array.ConvertAll utilisé avec ce type:

 var source = new [] {"Ally", "Bishop", "Billy"};
var target = Array.ConvertAll (source, x => nouvelle personne (x));

foreach (article var dans la cible)
{
  Console.WriteLine (item.Name);
}
Console.Read ();

// sortie:

// allié
// évêque
// Billy

Nous prenons ici un tableau de chaînes et en faisons un nouveau tableau de Person . Cela s'avère pratique lorsque nous voulons créer un nouveau tableau qui copie les données d'un autre tableau.

Méthode Array.Clone

Array.Clone effectue une copie superficielle de tous les éléments du tableau source et renvoie un objet contenant ces éléments. Voici un exemple d'utilisation de cette méthode:

 static void Main (string [] args)
{
  var source = new [] {"Ally", "Bishop", "Billy"};
  var target = (string []) source.Clone ();
  foreach (élément var dans la cible)
  {
    Console.WriteLine (element);
  }

  Console.Read ();
}

// sortie:

// allié
// évêque
// Billy 

Array.Clone renvoie un objet que nous devons convertir en un tableau de chaînes. Cela diffère de Array.CopyTo car il n'exige pas qu'un tableau cible / destination soit disponible lors de l'appel de la fonction, alors que Array.CopyTo nécessite un tableau de destination et un index. 19659025] Conclusion

La classe C # de Array est très utile pour travailler avec une collection de données. Il fournit des méthodes pour créer, manipuler, rechercher et trier des tableaux. Dans ce post, je vous ai montré comment copier des données d’un objet tableau à un autre. Vous avez vu les différentes méthodes disponibles dans la classe Array. Ce sont les méthodes Clone Copie vers ConstrainedCopy et ConvertAll . Les différents exemples vous ont montré comment utiliser ces méthodes, et je pense que cela devrait vous permettre d'acquérir des connaissances supplémentaires sur l'utilisation des tableaux en C #.

N'hésitez pas à laisser un commentaire si vous avez des questions. Bonne codage! ?


Les commentaires sont désactivés en mode aperçu.




Source link