我对字典进行了如下排序:

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);

最佳答案

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是不实现该接口的具体类型。

10-06 05:36