Een byte array initialiseren op een bepaalde waarde, anders dan de standaard null?

Ik ben bezig met het herschrijven van een oud project dat was gedaan in C++, naar C#.

Mijn taak is om het programma zo te herschrijven dat het zo dicht mogelijk bij het origineel functioneert.

Tijdens een heleboel file-handling maakt de vorige ontwikkelaar die dit programma schreef een structuur met een heleboel velden die overeenkomen met het ingestelde formaat waarin een bestand moet worden geschreven, dus al dat werk is al voor mij gedaan.

Deze velden zijn allemaal byte arrays. Wat de C++ code vervolgens doet is memset gebruiken om deze hele structuur in te stellen op allemaal spaties (0x20). Eén regel code. Makkelijk.

Dit is erg belangrijk omdat het hulpprogramma waar dit bestand uiteindelijk naar toe gaat, het bestand in dit formaat verwacht. Wat ik'heb moeten doen is deze struct veranderen in een class in C#, maar ik kan geen manier vinden om elk van deze byte arrays eenvoudig te initialiseren naar alle spaties karakters.

Wat ik uiteindelijk heb moeten doen is dit in de constructor van de klasse:

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

Dit werkt prima, maar ik'ben er zeker van dat er een eenvoudiger manier moet zijn om dit te doen. Wanneer de array wordt ingesteld op UserCode = new byte[6] in de constructor wordt de byte array automatisch geïnitialiseerd op de standaard null waarden. Is er geen manier dat ik het allemaal spaties kan laten worden bij de declaratie, zodat als ik mijn class' constructor aanroep dat het dan meteen zo geinitialiseerd wordt? Of een memset-achtige functie?

Gebruik dit om de array in de eerste plaats te maken:

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

Vervang `` door de gewenste array grootte.

Commentaren (7)

U kunt gebruik maken van Enumerable.Repeat()

Array van 100 items geïnitialiseerd op 0x20:

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

U kunt een collection initializer gebruiken:

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

Dit zal beter werken dan Repeat als de waarden niet identiek zijn.

Commentaren (2)