【发布时间】:2012-08-21 15:46:53
【问题描述】:
我在我的类中编写了一个简短的静态方法来迭代一些 Hashtables 我按键的顺序 (strings) 但我遇到了一个奇怪的编译器错误。这是有问题的方法:
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
有什么办法可以解决这个错误?提前致谢。
【问题讨论】:
-
值得一提的是,您可以只
return ht.Keys.Cast<string>().OrderBy(key => key).Select(key => ...);并相应地更改返回类型。 -
HashTable在这一点上也已过时。如果可能的话,你真的应该使用Dictionary。
标签: c# visual-studio-2008 hashtable