循环遍历字典并获取每个值C#

时间:2012-12-05 13:11:02

标签: c# c#-4.0

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

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

为什么突然出现错误

  

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

出现?有人可以帮忙吗?

非常感谢

5 个答案:

答案 0 :(得分:6)

entry在lambda中定义 - 在Select的参数中,并且只在其范围内。

答案 1 :(得分:5)

要迭代字典元素,您所要做的就是:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分: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;
            ........
            ........
        }

答案 4 :(得分:1)

你应该改变:

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

要:

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

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