если Rex M ответ не подходит (может быть, вы не хотите перестраивать словари для каждого года), то в качестве небольшого улучшения я могу предложить заменить
// temporary list, uncool
List<Order> processed = new List<Order>();
// fist step
foreach(Order ord in ActiveDictionary)
{
if(ord.IsReady)
{
processed.Add(ord);
}
}
to
var processed = ActiveDictionary.Where(x=>x.Value.Ready).ToArray();
, а остальная часть вашего кода будет
foreach(var item in processed)
{
ActiveDictionary.Remove(item.Key);
ProcessedDictionary.Add(item.Key, item.Value);
}
UPD: Как прокомментировал Ani , существует другое похожее решение:
var processed = ActiveDictionary.Values.Where(x=>x.Ready).ToArray();
foreach(var item in processed)
{
ActiveDictionary.Remove(item);
ProcessedDictionary.Add(item.Id, item);
}