Как я могу иметь локальный массив в каждой структуре?C#

Место общения программистов C#
Ответить
Anonymous
 Как я могу иметь локальный массив в каждой структуре?

Сообщение Anonymous »

Мой код использует структуру ref для анализа некоторых данных из файла. Меня вдохновил Utf8JsonReader, который использует тот же подход. Это структура, которую можно дублировать для чтения в различных сценариях. Вы можете сделать копию этой структуры и читать дальше. Затем вы можете использовать копию и продолжить чтение с того состояния, которое было текущим на момент создания копии. Это позволяет вам читать вперед, искать что-то еще, а затем продолжать в обычном порядке.
Это работает довольно хорошо, но есть одна загвоздка. Чтобы отслеживать состояние вложенности, мне нужен какой-то массив или коллекция. Я добавил в свою структуру массив для хранения в нем данных.
Но этот массив всегда будет одним и тем же экземпляром. Когда я делаю копию ридера, а затем продолжаю чтение (что меняет содержимое массива), предыдущая копия увидит те же изменения в массиве. Этого не должно происходить.
Как изменить следующий код, чтобы каждый экземпляр структуры имел собственную копию массива и чтобы массив также копировался/клонировался при создании структуры? скопировано?
Я бы также принял поле 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;
}
}
Примечание. Этот пример сильно упрощен. Структура LevelInfo имеет больше полей и методов, а массив инициализируется в конструкторе Reader до определенной предопределенной длины.


Подробнее здесь: https://stackoverflow.com/questions/787 ... ach-struct
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»