Frage

Denken Sie an den folgenden Code:

static int Main() {
     byte[] data = File.ReadAllBytes("anyfile");
     SomeMethod(data);
     ...
}
static void SomeMethod(byte[] data) {
     data[0] = anybytevalue; // this line should not be possible!!!
     byte b = data[0];       // only reading should be allowed
     ...
}

Gibt es eine Möglichkeit, das Byte [] in C # schreibgeschützt zu übergeben?Kopieren ist keine Lösung.Ich möchte keinen Speicher verschwenden (weil die Datei sehr groß werden könnte).Bitte denken Sie an die Leistung!

War es hilfreich?

Lösung

Sie können ein ReadOnlyCollection<byte> , wie folgt:

. generasacodicetagpre.

Es wäre jedoch besser, ein Stream , wie folgt:
Auf diese Weise lesen Sie die gesamte Datei überhaupt nicht in den Speicher.

generasacodicetagpre.

Andere Tipps

Ich denke, das könnte sein, wonach Sie suchen.

Kompilieren Sie den untenstehenden Code und Sie erhalten diesen Kompilierfehler: Eigenschaft oder Indexer 'stapel2.myreadonlytes.Die [INT]' kann nicht zugewiesen werden - es wird nur gelesen

generasacodicetagpre.

Ich würde Ihnen empfehlen, das höchstmögliche Objekt in der Hierarchie zu verwenden, das die Aufgabe ausführt.In Ihrem Fall wäre dies IEnumerable<byte>:

static int Main() 
{
     byte[] data = File.ReadAllBytes("anyfile");
     SomeMethod(data);
}

static void SomeMethod(IEnumerable<byte> data)
{
    byte b = data.ElementAt(0); 
    // Notice that the ElementAt extension method is sufficiently intelligent
    // to use the indexer in this case instead of creating an enumerator
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top