最简单的方法可能是创建一个新的字典,如果可以的话:
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 toRemove = new List();
foreach (KeyValuePair pair in dictionary)
{
if (pair.Value < 0)
{
toRemove.Add(pair.Key);
}
}
foreach (var key in toRemove)
{
dictionary.Remove(key);
}
…但是如果你可以使用LINQ,我会鼓励你做。我的第二个解决方案相当于“旁边”版本,但更可读的IMO。