var sortedListOfNodes = _nodeDictionary.Values.OrderBy((n) => n.Time);
然后我选择了一个元素:
var selectedNode = sortedListOfNodes.First(n => n.Time - CurrentTime > new TimeSpan(1,0,0));
然后我在该节点上进行了一些处理,最后想要从列表中删除节点,而不会破坏排序的顺序。
以下会维持订单吗?
sortedListOfNodes = (IOrderedEnumerable<Node>)sortedListOfNodes.Where(node => node != selectedNode);
答案 0 :(得分:3)
在ToList
之后添加对OrderBy
的来电。现在您有一个可以操作的列表(假设您不插入项目,它将保持有序)。
var sortedListOfNodes = _nodeDictionary.Values.OrderBy((n) => n.Time).ToList();
var selectedNode = sortedListOfNodes.First(n => n.Time - CurrentTime > new TimeSpan(1,0,0));
sortedListOfNodes.Remove(selectedNode);
在旁注中,将Where
的结果转换为IOrderedEnumerable<Node>
的示例将在运行时因转换失败而失败。您正在调用的Where
是一种不实现该接口的具体类型。