(注意:此示例代码需要 C# 7.2 或更高版本,以及Nuget System.Memory包。)
假设我们有一个readonly struct
如下:
public readonly struct Test
{
public Test(int value)
{
Value = value;
}
public int Value { get; }
}
现在让我们把它放到一个数组中:
var array = new Test[] { new Test(1) };
Console.WriteLine(array[0].Value); // Prints 1
到目前为止,一切都很好。您不能编写代码array[0].Value
直接修改。
现在假设我们这样做:
array.AsSpan().AsBytes()[3] = 1;
Console.WriteLine(array[0].Value); // Prints 16777217
所以现在我们已经修改Value
了数组中只读结构的组件。
这种行为正确吗?