从字典中获取键和值,“foreach”除外

时间:2012-02-28 14:13:15

标签: c# .net linq

我有:

Dictionary<string, Dictionary<string, string>> matchesLists = new Dictionary<string, Dictionary<string, string>>();
if (matchesLists.ContainsKey("Errors"))
{
    var dict = GetInnerTextMatches(webDriver);
    dict.Keys.ToList().ForEach(k => matchesLists["Errors"].Add(k, dict[k]));
}
else
    matchesLists.Add("Errors", GetInnerTextMatches(webDriver));

GetInnerTextMatches(webDriver)返回Dictionary<string,string>

是否有更简单的方法将字典添加到匹配列表[“错误”]?

2 个答案:

答案 0 :(得分:2)

在.NET 4中,您可以使用ConcurrentDictionary class和方法AddOrUpdate(),如果是.NET 4,则可以看到this MSDN page

答案 1 :(得分:2)

目前,您正在添加已由其他内容返回的现有字典。我不会这样做 - 它最终导致可能令人困惑的行为。我将这段代码写成:

Dictionary<string, string> errors;
if (!matchesLists.TryGetValue("Errors", out errors))
{
    errors = new Dictionary<string, string>();
    matchesLists["Errors"] = errors;
}
foreach (var entry in GetInnerTextMatches(webDriver))
{
    errors.Add(entry.Key, entry.Value);
}

通过这种方式,您知道GetInnerTextMatches已实施,但无关紧要 - 您不会干扰它,并且对其返回的字典进行的任何内部更改都会赢得&#39} ;干扰你。