Inicializovať pole bajtov na určitú hodnotu, inú ako je predvolená hodnota null?

Mám veľa práce s prepísaním starého projektu, ktorý bol vytvorený v C++, do C#.

Mojou úlohou je prepísať program tak, aby fungoval čo najbližšie k originálu.

Počas množstva prác so súbormi predchádzajúci vývojár, ktorý tento program napísal, vytvoril štruktúru obsahujúcu tonu polí, ktoré zodpovedajú nastavenému formátu, v ktorom má byť súbor zapísaný, takže všetka táto práca je už urobená za mňa.

Všetky tieto polia sú polia bajtov. Kód C++ potom použije memset na nastavenie celej tejto štruktúry na všetky znaky medzier (0x20). Jeden riadok kódu. Jednoduché.

Je to veľmi dôležité, pretože nástroj, ktorému sa tento súbor nakoniec odovzdá, očakáva súbor v tomto formáte. Musel som zmeniť túto štruktúru na triedu v jazyku C#, ale nemôžem nájsť spôsob, ako jednoducho inicializovať každé z týchto polí bajtov na všetky znaky medzery.

Nakoniec som musel urobiť toto v konštruktore triedy:

//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
    UserCode[index] = 0x20;
    index++;
}

Funguje to dobre, ale som si istý, že musí existovať jednoduchší spôsob, ako to urobiť. Keď je pole nastavené na UserCode = new byte[6] v konštruktore, pole bytov sa automaticky inicializuje na predvolené nulové hodnoty. Nedá sa nejako zariadiť, aby sa pri deklarácii premenilo na všetky medzery, aby sa pri volaní konštruktora mojej triedy' takto hneď inicializovalo? Alebo nejaká funkcia podobná memset?

Použite ho na vytvorenie poľa na prvom mieste:

byte[] array = Enumerable.Repeat((byte)0x20, ).ToArray();

Nahraďte `` požadovanou veľkosťou poľa.

Komentáre (7)

Môžete použiť Enumerable.Repeat()

Pole 100 položiek inicializovaných na 0x20:

byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();
Komentáre (4)

Môžete použiť inicializátor kolekcie:

UserCode = new byte[]{0x20,0x20,0x20,0x20,0x20,0x20};

Bude to fungovať lepšie ako Repeat, ak hodnoty nie sú identické.

Komentáre (2)