ReadItemAsyn c контейнера не может правильно проанализировать экземпляр Stack <T> - PullRequest
0 голосов
/ 07 августа 2020

Как известно, экземпляр Stack представляет коллекцию в порядке очереди (LIFO).

Stack<ChangeItem> ChangeItems = new Stack<ChangeItem>();
ChangeItems.Push(changeItem);

После сериализации в Cosmos DB элемент, поступивший последним, находится в позиции 0. Последовательность правильно.

Но проблема в том, что экземпляр извлекается обратно из БД.

response = await container.ReadItemAsync<T>(id, partitionKey);

Последовательность обратная. Это становится очередностью в порядке очереди. Затем добавьте новый элемент и сохраните его, последний элемент находится на первой позиции. В конечном итоге последовательность становится беспорядочной.

Например,

При первом сохранении экземпляра Stack последовательность будет [1, 2]

Затем при получении экземпляра обратно, последовательность становится [2, 1], добавляется новый элемент, последовательность равна [3, 1, 2]

Затем возвращается экземпляр, последовательность становится [2, 1, 3], добавляется новый элемент, последовательность это [4, 2, 1, 3]

... Последовательность беспорядка

Есть какие-нибудь настройки, чтобы избежать этой проблемы? Спасибо

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Существует ограничение для стеков, при котором порядок изменяется на обратный при сериализации и десериализации стека. Я бы посоветовал использовать более плоский список List, который сериализуется и десериализуется красиво в том же порядке. Кроме того, вы можете использовать LINQ для сортировки по датам.

0 голосов
/ 07 августа 2020

Если я понимаю, что вам нужен порядок сортировки по значению свойства, например OccurredOn, я бы предложил использовать SortedSet вместо Stack. Предполагая, что ваш класс модели определен правильно для сравнения, ваше приложение будет автоматически сортировать их в памяти и должно постоянно сохраняться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...