У меня есть Dictionary<Guid, ElementViewModel>
. (ElementViewModel - это наш собственный сложный тип.)
Я добавляю элементы в словарь со стандартным запасом items.Add(Guid.NewGuid, new ElementViewModel() { /*setters go here*/ });
,
На более позднем этапе я удаляю некоторые или все эти элементы.
Упрощенный вид моей ElementViewModel таков:
class ElementViewModel
{
Guid Id { get; set; }
string Name { get; set; }
int SequenceNo { get; set; }
}
Может быть важно отметить, что SequenceNos сжимаются в коллекции после добавления, в случае, если имели место другие операции, такие как перемещение и копирование. {1, 5, 6} -> {1, 2, 3}
Упрощенный вид моей операции удаления:
public void RemoveElementViewModel(IEnumerable<ElementViewModel> elementsToDelete)
{
foreach (var elementViewModel in elementsToDelete)
items.Remove(elementViewModel.Id);
CompactSequenceNumbers();
}
Я проиллюстрирую проблему на примере:
Я добавляю 3 словаря в словарь:
var newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 1, Name = "Element 1" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 2, Name = "Element 2" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 3, Name = "Element 3" });
Удаляю 2 пункта
RemoveElementViewModel(new List<ElementViewModel> { item2, item3 }); //imagine I had them cached somewhere.
Теперь я хочу добавить еще 2 элемента:
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 2, Name = "Element 2, Part 2" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 3, Name = "Element 3, Part 2" });
При оценке словаря на данный момент я ожидал, что порядок элементов будет
«Элемент 1», «Элемент 2, часть 2», «Элемент 3, часть 2»
но на самом деле это в следующем порядке:
«Элемент 1», «Элемент 3, часть 2», «Элемент 2, часть 2»
Я полагаюсь на порядок этих предметов, чтобы быть определенным образом. Почему это не так, как ожидалось, и что я могу с этим поделать?