0

我正在使用以下代码来获取字典的每个值及其索引

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

为什么突然出错

当前上下文中不存在名称“条目”

出现??有人可以帮忙吗?

十分感谢

4

5 回答 5

6

entry在 lambda 中定义 - 在 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

您正在字典上定义两个迭代器:foreach循环和Select操作。您可能应该将它们合并为一个:

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

entry=>GetTermIndex(entry.Key)lambda 函数。它具有与返回类型 GetTermIndex 方法相同的类型的传入参数“条目”和传出参数。

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;
            ........
            ........
        }
于 2012-12-05T13:21:27.510 回答
1

你应该改变:

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

到:

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

因为 this 是 foreach 中的对象,所以 entry 在 lambda 表达式的范围内

于 2012-12-05T13:20:49.170 回答