Je suis occupé à réécrire un vieux projet qui a été fait en C++, en C#.
Ma tâche consiste à réécrire le programme de manière à ce qu'il fonctionne aussi près que possible de l'original.
Au cours d'un certain nombre de manipulations de fichiers, le développeur précédent qui a écrit ce programme crée une structure contenant une tonne de champs qui correspondent au format défini dans lequel un fichier doit être écrit, donc tout ce travail est déjà fait pour moi.
Ces champs sont tous des tableaux d'octets. Ce que le code C++ fait ensuite, c'est utiliser memset
pour mettre toute cette structure en caractères d'espaces (0x20
). Une ligne de code. Facile.
C'est très important car l'utilitaire auquel ce fichier est destiné attend le fichier dans ce format. Ce que j'ai dû faire, c'est transformer cette structure en une classe en C#, mais je ne trouve pas de moyen d'initialiser facilement chacun de ces tableaux d'octets à tous les caractères d'espace.
Voici ce que j'ai fini par faire dans le constructeur de la classe :
//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
UserCode[index] = 0x20;
index++;
}
Cela fonctionne bien, mais je suis sûr qu'il doit y avoir un moyen plus simple de le faire. Lorsque le tableau est défini sur UserCode = new byte[6]
dans le constructeur, le tableau d'octets est automatiquement initialisé avec les valeurs nulles par défaut. N'y a-t-il pas un moyen de faire en sorte qu'il devienne un espace dès la déclaration, de sorte que lorsque j'appelle le constructeur de ma classe, il soit immédiatement initialisé comme ceci ? Ou une fonction de type memset
?
Vous pouvez utiliser [Enumerable.Repeat()][1].
Tableau de 100 éléments initialisés à 0x20 :
byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();
Vous pouvez utiliser un [initialisateur de collection][1] :
UserCode = new byte[]{0x20,0x20,0x20,0x20,0x20,0x20};
Cela fonctionnera mieux que [Repeat
][2] si les valeurs ne sont pas identiques.
[1] : http://msdn.microsoft.com/en-us/library/bb384062.aspx [2] : http://msdn.microsoft.com/en-us/library/bb348899.aspx