C# 顺序哈希表遍历

C# 顺序哈希表遍历,c#,visual-studio-2008,hashtable,C#,Visual Studio 2008,Hashtable,我在类中编写了一个简短的静态方法,以按键的顺序(strings)迭代一些Hashtables,但我遇到了一个奇怪的编译器错误。下面是有问题的方法: public static DictionaryEntry inorderHashtable(Hashtable ht) { string[] keys = ht.Keys.Cast<string>().ToArray<string>(); Array.Sort(keys); foreach (str

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

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]);
    }
}
以下是我从VS2008得到的错误:
'ns.myclass.inorderHashtable(System.Collections.Hashtable)'不能是迭代器块,因为'System.Collections.DictionaryEntry'不是迭代器接口类型


如何避免这个错误?提前感谢。

您的方法需要返回类型
IEnumerable

基本上,通过使用
yield return
而不是
return
,您没有返回一个
DictionaryEntry
,您(可能)返回了很多


如果不确定发生了什么,请参阅和。

您的方法需要返回类型
IEnumerable

基本上,通过使用
yield return
而不是
return
,您没有返回一个
DictionaryEntry
,您(可能)返回了很多


如果您不确定发生了什么,请查看并重试。

值得一提的是,您可以
返回ht.Keys.Cast().OrderBy(key=>key)。选择(key=>…)
并相应地更改返回类型。
哈希表
此时也已过时。如果可能的话,您真的应该使用
字典
。值得一提的是,您可以
返回ht.Keys.Cast().OrderBy(key=>key)。选择(key=>…)
并相应地更改返回类型。
哈希表
此时也已过时。如果可能的话,你真的应该使用一本
字典“非泛型类型'System.Collections.IEnumerable'不能与类型参数一起使用,但仅返回IEnumerable即可正常工作。”。谢谢你的帮助。@David你真的应该修复代码以使用泛型
IEnumerable
接口。我的猜测是,您只需要使用
添加一个
,通用名称空间就可以工作了。@Servy,这确实是
使用
的问题所在。再次感谢,我弄错了“非泛型类型'System.Collections.IEnumerable'不能与类型参数一起使用,但仅返回IEnumerable即可正常工作。”。谢谢你的帮助。@David你真的应该修复代码以使用泛型
IEnumerable
接口。我的猜测是,您只需要使用
添加一个
,通用名称空间就可以工作了。@Servy,这确实是
使用
的问题所在。再次感谢。
foreach(DictionaryEntry dentry in inorderHashtable(myTable)) { /* ... */ }