2012-12-05 39 views
0

我用下面的代碼獲取字典的每個值和它的指數循環通過字典,並得到每個值C#

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

爲什麼突然錯誤

名稱「條目'不存在於當前上下文中

出現??任何人都可以幫忙嗎?

謝謝很多

回答

5

遍歷字典元素所有你需要做的是:

foreach (var entry in freq) 
{ 
    var wordFreq = entry.Value; 
    ........ 
    ........ 
} 
6

entry在拉姆達定義 - 在參數Select,僅在在它的範圍。

2

你定義在你的字典兩個迭代器:在foreach循環和Select操作。你或許應該將它們合併成一個:

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

你應該改變:

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

要:

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

因爲這是在foreach對象,項是在範圍lambda表達式

2

entry=>GetTermIndex(entry.Key)是lambda函數。它具有與返回類型GetTermIndex方法相同的傳入參數'entry'和傳出參數類型。

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

相當於:

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

條目第二代碼片段的的foreach本地存在,並且不能在其外部訪問。編譯器對你說。

你應該重寫你的代碼:

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

嗯,其實它不是完全等同的(應補充至少方法調用),但+1 –