次のコードを使用して、辞書の各値とそのインデックスを取得しています
foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
{
var wordFreq = entry.Value;
........
}
なぜ突然エラー
名前「エントリ」は現在のコンテキストに存在しません
現れる??誰か助けてくれませんか?
本当にありがとうございました
entry
はラムダで定義されています-パラメータtoで、そのSelect
範囲内にのみあります。
辞書要素を反復処理するには、次のことを行う必要があります。
foreach (var entry in freq)
{
var wordFreq = entry.Value;
........
........
}
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;
........
........
}
foreach
ディクショナリに対して、ループと操作の 2 つの反復子を定義していますSelect
。おそらくそれらを 1 つにマージする必要があります。
foreach (var entry in freq)
{
var termIndex = GetTermIndex(entry.Key);
var wordFreq = entry.Value;
// ........
// ........
}
変更する必要があります:
...
var wordFreq = entry.Value;
...
に:
...
var wordFreq = termIndex.Value;
...
これはforeachのオブジェクトであるため、エントリはラムダ式のスコープ内にあります