按顺序进行Hashtable遍历

时间:2012-08-21 15:46:53

标签: c# visual-studio-2008 hashtable

我在我的类中编写了一个简短的静态方法,以按键(Hashtable s)的顺序迭代一些string但是我得到了一个奇怪的编译器错误。这是有问题的方法:

public static DictionaryEntry inorderHashtable(Hashtable ht) {
    string[] keys = ht.Keys.Cast<string>().ToArray<string>();
    Array.Sort(keys);

    foreach (string key in keys) {
        yield return new DictionaryEntry(key, ht[key]);
    }
}

稍后在类中使用它:

foreach(DictionaryEntry dentry in inorderHashtable(myTable)) { /* ... */ }

以下是我从VS2008获得的错误:'ns.myclass.inorderHashtable(System.Collections.Hashtable)' cannot be an iterator block because 'System.Collections.DictionaryEntry' is not an iterator interface type

这种错误有什么办法?提前谢谢。

1 个答案:

答案 0 :(得分:5)

您的方法需要返回类型IEnumerable<DictionaryEntry>

基本上,使用yield return代替return,您不会返回一个 DictionaryEntry,您(可能)会返回许多

如果您不确定发生了什么,请参阅herehere