2015-04-01 4 views
1

Я отсортирован словарь как это:Удаление объекта из 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); 

ответ

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

+0

Perfect, не думал об этом. спасибо – Anders

Смежные вопросы