1

Hashtableクラス内に短い静的メソッドを記述して、キー(s)の順にいくつかの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

このエラーを回避する方法は何ですか?前もって感謝します。

4

1 に答える 1

5

メソッドは戻り型を持っている必要がありますIEnumerable<DictionaryEntry>

基本的に、yield returnの代わりにを使用することにより、 1つreturnを返すのではなく、(潜在的に)多くを返すことになります。 DictionaryEntry

何が起こっているのかわからない場合は、ここここを参照してください。

于 2012-08-21T15:48:41.320 に答える