Это работает довольно хорошо, но есть одна загвоздка. Чтобы отслеживать состояние вложенности, мне нужен какой-то массив или коллекция. Я добавил в свою структуру массив для хранения в нем данных.
Но этот массив всегда будет одним и тем же экземпляром. Когда я делаю копию ридера, а затем продолжаю чтение (что меняет содержимое массива), предыдущая копия увидит те же изменения в массиве. Этого не должно происходить.
Как изменить следующий код, чтобы каждый экземпляр структуры имел собственную копию массива и чтобы массив также копировался/клонировался при создании структуры? скопировано?
Я бы также принял поле stackalloc array[] в моем Reader, чтобы сделать массив частью структуры, но это не так. кажется, существуют. Он всегда ссылается на отдельный массив в куче.
Я также пытался обернуть массив в отдельную структуру и использовать методы-оболочки, но это ничего не изменило . Чего-то все еще не хватает.
Код: Выделить всё
public ref struct Reader
{
private struct LevelInfo
{
private ushort indentation;
public int Indentation
{
readonly get
{
return indentation;
}
set
{
ArgumentOutOfRangeException.ThrowIfLessThan(value, 0);
ArgumentOutOfRangeException.ThrowIfGreaterThan(value, 0b00111111_11111111);
indentation = (ushort)value;
}
}
}
private LevelInfo[] levels;
// example usage:
void SomeMethod()
{
levels[0].Indentation = 1;
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ach-struct
Мобильная версия