【发布时间】:2023-08-28 13:01:01
【问题描述】:
我有一个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 部分”
我依靠这些项目的顺序来确定方式。为什么不符合预期,我该怎么办?
【问题讨论】:
标签: c# .net dictionary hashtable