Αρχικοποίηση ενός πίνακα byte σε μια συγκεκριμένη τιμή, εκτός από την προεπιλεγμένη null;

Είμαι απασχολημένος με την επανεγγραφή ενός παλιού έργου που είχε γίνει σε C++, σε C#.

Το καθήκον μου είναι να ξαναγράψω το πρόγραμμα έτσι ώστε να λειτουργεί όσο το δυνατόν πιο κοντά στο πρωτότυπο.

Κατά τη διάρκεια ενός σωρού χειρισμών με αρχεία, ο προηγούμενος προγραμματιστής που έγραψε αυτό το πρόγραμμα δημιουργεί μια δομή που περιέχει έναν τόνο πεδίων που αντιστοιχούν στην καθορισμένη μορφή με την οποία πρέπει να γραφτεί ένα αρχείο, οπότε όλη αυτή η δουλειά έχει ήδη γίνει για μένα.

Αυτά τα πεδία είναι όλα πίνακες byte. Αυτό που κάνει στη συνέχεια ο κώδικας της C++ είναι να χρησιμοποιήσει το memset για να θέσει ολόκληρη αυτή τη δομή σε όλους τους χαρακτήρες κενών (0x20). Μια γραμμή κώδικα. Εύκολο.

Αυτό είναι πολύ σημαντικό, καθώς το βοηθητικό πρόγραμμα στο οποίο πηγαίνει τελικά αυτό το αρχείο περιμένει το αρχείο σε αυτή τη μορφή. Αυτό που έπρεπε να κάνω είναι να αλλάξω αυτή τη δομή σε μια κλάση στη C#, αλλά δεν μπορώ να βρω έναν τρόπο να αρχικοποιήσω εύκολα κάθε έναν από αυτούς τους πίνακες byte σε όλους τους χαρακτήρες κενών.

Αυτό που κατέληξα να κάνω είναι το εξής στον κατασκευαστή της κλάσης:

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

Αυτό λειτουργεί μια χαρά, αλλά είμαι σίγουρος ότι πρέπει να υπάρχει ένας απλούστερος τρόπος για να το κάνω αυτό. Όταν ο πίνακας ορίζεται σε UserCode = new byte[6] στον κατασκευαστή, ο πίνακας byte αρχικοποιείται αυτόματα στις προεπιλεγμένες μηδενικές τιμές. Υπάρχει κανένας τρόπος που μπορώ να κάνω να γίνουν όλα τα κενά κατά τη δήλωση, έτσι ώστε όταν καλώ την κλάση μου' τον κατασκευαστή να αρχικοποιείται κατευθείαν έτσι; Ή κάποια συνάρτηση τύπου "memset";

Χρησιμοποιήστε αυτό για να δημιουργήσετε τον πίνακα εξαρχής:

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

Αντικαταστήστε το `` με το επιθυμητό μέγεθος του πίνακα.

Σχόλια (7)

Μπορείτε να χρησιμοποιήσετε Enumerable.Repeat()

Συστοιχία 100 στοιχείων αρχικοποιημένη σε 0x20:

byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();
Σχόλια (4)

Μπορείτε να χρησιμοποιήσετε έναν αρχικοποιητή συλλογής:

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

Αυτό θα λειτουργήσει καλύτερα από το Επανάληψη αν οι τιμές δεν είναι ίδιες.

Σχόλια (2)