0

次のコードを使用して、辞書の各値とそのインデックスを取得しています

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
{
     var wordFreq = entry.Value;
     ........
}

なぜ突然エラー

名前「エントリ」は現在のコンテキストに存在しません

現れる??誰か助けてくれませんか?

本当にありがとうございました

4

5 に答える 5

6

entryはラムダで定義されています-パラメータtoで、そのSelect範囲内にのみあります。

于 2012-12-05T13:13:08.163 に答える
5

辞書要素を反復処理するには、次のことを行う必要があります。

foreach (var entry in freq)
{
    var wordFreq = entry.Value;
    ........
    ........
}
于 2012-12-05T13:14:56.127 に答える
2

entry=>GetTermIndex(entry.Key)isラムダ関数です。これには、戻り型GetTermIndexメソッドと等しい型の着信パラメーター'entry'と発信パラメーターがあります。

freq.Select(entry => GetTermIndex(entry.Key))

と同等です:

foreach(var entry in freq)
{
    yield return GetTermIndex(entry.Key);
}

エントリの2番目のコードフラグメントはforeachにローカルに存在し、その外部からアクセスすることはできません。コンパイラはあなたにそれを言います。

コードを次のように書き直す必要があります。

        foreach (var entry in freq)
        {
            var termIndex = GetTermIndex(entry.Key));
            var wordFreq = entry.Value;
            ........
            ........
        }
于 2012-12-05T13:21:27.510 に答える
2

foreachディクショナリに対して、ループと操作の 2 つの反復子を定義していますSelect。おそらくそれらを 1 つにマージする必要があります。

foreach (var entry in freq)
{
    var termIndex = GetTermIndex(entry.Key);
    var wordFreq = entry.Value;
    // ........
    // ........
 }
于 2012-12-05T13:19:07.823 に答える
1

変更する必要があります:

...
var wordFreq = entry.Value;
...

に:

...
var wordFreq = termIndex.Value;
...

これはforeachのオブジェクトであるため、エントリはラムダ式のスコープ内にあります

于 2012-12-05T13:20:49.170 に答える