(Примечание. Этот пример кода требует С# 7.2 или новее, а Nuget System.Memory.
Предположим, что мы имеем a 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
структуры readonly в массиве.
Правильно ли это поведение?