2012-12-05 40 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 –