我知道必须有更好的方法来做到这一点......也许是LINQ?如果我删除一个值,它会使迭代器无效,这就是为什么我在无限循环内部重新启动进程的原因。我正在寻找一种更容易阅读,维护并最终更快的方法。这就是我得到的:
Dictionary<string, string> Channels = //...;
while (true)
{
var bFound = false;
foreach(var c in Channels)
{
if(c.Value == version)
{
Channels.Remove(c.Key);
bFound = true;
break;
}
}
if (!bFound) { break; }
}
感谢您在优化此例程方面的任何帮助。
答案 0 :(得分:6)
根据您的示例,您将根据与版本值的比较来删除。
Channels = Channels.Where(x=> x.Value != version)
.ToDictionary(c => c.Key, c => c.Value);
答案 1 :(得分:3)
我正在寻找一种更容易阅读,维护并最终更快的方法
只需使用以下代码:
var keys = Channels.Keys.ToArray();
foreach(var key in keys)
{
if(Channels[key] == version)
{
Channels.Remove(key);
}
}
简化不需要LINQ。为了表现,我们遍历字典一次。
答案 2 :(得分:2)
如果您在从字典中删除项目之前捕获匹配项,则您的枚举器将不会失效。
List<KeyValuePair<string, string>> matches = Channels
.Where(kvp => kvp.Value == version)
.ToList();
foreach(KeyValuePair<string, string> match in matches)
{
Channels.Remove(match.Key);
}