194 votes

Initialiser un tableau d’octets à une certaine valeur, autre que la valeur null par défaut ?

Je suis désolé si c'est une double question, mais je ne trouve pas de réponse à cette ici ou ailleurs sur le web.

Je me suis occupé de la réécriture d'un vieux projet qui a été fait en C++, C#.

Ma tâche consiste à réécrire le programme pour qu'il fonctionne comme proche de l'original que possible.

Pendant un tas de fichier la manipulation de la précédente développeur qui écrit ce programme permet de créer une structure contenant une tonne de champs qui correspondent à la définition du format d'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++ alors n'est utiliser memset pour définir cet ensemble de la structure de tous les espaces de caractères (0x20). Une seule ligne de code. Facile.

Ceci est très important car l'utilité de ce fichier, éventuellement, à sattend à ce que le fichier dans ce format. Ce que j'ai eu à faire est de changer cette structure à une classe en C#, mais je ne peux pas trouver un moyen facile de les initialiser chacun de ces tableaux d'octets à tous les caractères d'espace.

Ce que j'ai fini par avoir à faire est de cette 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 faire cela. Lorsque le tableau est mis à l' UserCode = new byte[6] dans le constructeur le tableau d'octets est automatiquement initialisé à null par défaut des valeurs. Il n'y a pas moyen que je peux en faire tous les espaces lors de la déclaration, de sorte que lorsque j'appelle la classe de constructeur qu'il est initialisé tout de suite comme ça? Ou quelques - memset-comme la fonction? Je vous remercie à l'avance.

243voto

LukeH Points 110965

Pour les petits tableaux utilisez la syntaxe d’initialisation de tableau :

Pour les plus grands tableaux utilisent une norme `` boucle. C’est la façon la plus lisible et plus efficace de le faire :

Bien sûr, si vous avez besoin pour ce faire beaucoup alors vous pouvez créer une méthode d’assistance pour aider à garder votre code concis :

116voto

Thorsten Dittmar Points 28193

Cela permet de créer le tableau en premier lieu :

Remplacer `` avec la taille du tableau souhaité.

48voto

Yochai Timmer Points 19802

Vous pouvez utiliser Enumerable.Repeat()

Tableau de 100 éléments initialisés à 0 x 20 :

36voto

Yuriy Rozhovetskiy Points 14033
var array = Encoding.ASCII.GetBytes(new string(' ', 100));

2voto

slfan Points 4541

Vous pouvez accélérer l’initialisation et simplifier le code en utilisant le la classe parallèle :

Bien sûr, vous pouvez créer le tableau en même temps :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X