Самый простой способ, вероятно, - создать новый словарь, если это нормально для вас:
var newDictionary = oldDictionary.Where(pair => pair.Value >= 0)
.ToDictionary(pair => pair.Key,
pair => pair.Value);
Если у вас есть , чтобы изменить существующий словарь (например, из-за того, что несколько других объектов имеют ссылку на один и тот же словарь), вам необходимо создать список ключей для удаления, а затем удалить их:
var toRemove = dictionary.Where(pair => pair.Value < 0)
.Select(pair => pair.Key)
.ToList();
foreach (var key in toRemove)
{
dictionary.Remove(key);
}
РЕДАКТИРОВАТЬ: я только что заметил первое предложение:«Я не в решениях LINQ».Если это означает, что вы не хотите использовать решение LINQ, вот версия от руки:
List<int> toRemove = new List<int>();
foreach (KeyValuePair<int, int> pair in dictionary)
{
if (pair.Value < 0)
{
toRemove.Add(pair.Key);
}
}
foreach (var key in toRemove)
{
dictionary.Remove(key);
}
... но если вы можете использоватьLINQ, я бы посоветовал вам сделать.Мое второе решение эквивалентно версии «от руки», но более читабельно для ИМО.