如何通过IDictionary枚举

时间:2011-04-18 06:53:49

标签: c#

如何通过IDictionary枚举?请参考下面的代码。

 public IDictionary<string, string> SelectDataSource
 {
    set
    {
        // This line does not work because it returns a generic enumerator,
        // but mine is of type string,string
        IDictionaryEnumerator enumerator = value.GetEnumerator();
    }
 }

4 个答案:

答案 0 :(得分:6)

手动枚举非常罕见(例如与foreach相比) - 我建议的第一件事是:检查你真的需要它。但是,由于字典枚举为键值对:

IEnumerator<KeyValuePair<string,string>> enumerator = value.GetEnumerator();

应该有效。或者,如果它只是 方法变量(不是字段),那么:

var enumerator = value.GetEnumerator();

或更好(因为如果它不是一个字段,它可能需要本地处理):

using(var enumerator = value.GetEnumerator())
{ ... }

或最好(“KISS”):

foreach(var pair in value)
{ ... }

但是,您还应该在替换时始终处置任何现有值。此外,仅限于设置的属性非常罕见。您真的可能想要检查这里没有更简单的API ...例如,将字典作为参数的方法。

答案 1 :(得分:4)

foreach(var keyValuePair in value)
{
     //Do something with keyValuePair.Key
     //Do something with keyValuePair.Value
}

OR

IEnumerator<KeyValuePair<string,string>> enumerator = dictionary.GetEnumerator();

using (enumerator)
{
    while (enumerator.MoveNext())
    {
        //Do something with enumerator.Current.Key
        //Do something with enumerator.Current.Value
    }
}

答案 2 :(得分:2)

如果您只想枚举它,只需使用foreach(var item in myDic) ...进行示例实现,请参阅MSDN Article

答案 3 :(得分:-1)

平滑解决方案

await Promise.race([
  page.waitForXPath("//*[contains(., 'GNRE - Web Service')]"),
  page.waitForXPath("//*[contains(., 'Não há dados')]")
])