Удаление объекта из IOrderedEnumerable
Я отсортировал словарь так:
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);
1 ответ
Решение
Добавить звонок в 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
Вы вызываете конкретный тип, который не реализует этот интерфейс.