Think of the following 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
...
}
Is there a way of readonly passing the byte[] in C#? Copying isn't a solution. I would not like to waste memory (because the file might get very big). Please keep performance in mind!
You can pass a ReadOnlyCollection<byte>
, like this:
static int Main() {
byte[] data = File.ReadAllBytes("anyfile");
SomeMethod(new ReadOnlyCollection<byte>(data));
...
}
static void SomeMethod(ReadOnlyCollection<byte> data) {
byte b = data[0]; // only reading is allowed
...
}
However, it would be better to pass a Stream
, like this:
This way, you won't read the entire file into memory at all.
static int Main() {
Stream file = File.OpenRead("anyfile");
SomeMethod(file);
...
}
static void SomeMethod(Stream data) {
byte b = data.ReadByte(); // only reading is allowed
...
}