Удаление объекта из 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 Вы вызываете конкретный тип, который не реализует этот интерфейс.

Другие вопросы по тегам