Wie übergebe ich ein Byte-Array schreibgeschützt?
-
17-09-2020 - |
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!
Lösung
Sie können ein ReadOnlyCollection<byte>
, wie folgt:
Es wäre jedoch besser, ein Stream
, wie folgt:
Auf diese Weise lesen Sie die gesamte Datei überhaupt nicht in den Speicher.
Andere Tipps
Ich denke, das könnte sein, wonach Sie suchen.
Kompilieren Sie den untenstehenden Code und Sie erhalten diesen Kompilierfehler:
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
}