(Note: This sample code requires C# 7.2 or later, and the Nuget System.Memory package.)
Let's suppose we have a readonly struct
as follows:
public readonly struct Test
{
public Test(int value)
{
Value = value;
}
public int Value { get; }
}
Now let's put it into an array:
var array = new Test[] { new Test(1) };
Console.WriteLine(array[0].Value); // Prints 1
So far so good. You cannot write code to modify array[0].Value
directly.
Now suppose we do this:
array.AsSpan().AsBytes()[3] = 1;
Console.WriteLine(array[0].Value); // Prints 16777217
So now we've modified the Value
component of the readonly struct in the array.
Is this behaviour correct?