Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环遍历字典并获得每个值C#_C#_C# 4.0 - Fatal编程技术网

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

循环遍历字典并获得每个值C#,c#,c#-4.0,C#,C# 4.0,我使用以下代码来获取字典的每个值及其索引 foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))) { var wordFreq = entry.Value; ........ } 为什么突然发生错误 当前上下文中不存在名称“entry” 出现??有人能帮忙吗 非常感谢条目是在lambda中定义的-在参数中选择,并且仅在其范围内。要迭代字典元素,您只需执行以下操作: foreach

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

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)))
{
     var wordFreq = entry.Value;
     ........
}
为什么突然发生错误

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

出现??有人能帮忙吗


非常感谢

条目
是在lambda中定义的-在参数中选择,并且仅在其范围内。

要迭代字典元素,您只需执行以下操作:

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

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

foreach (var entry in freq)
{
    var termIndex = GetTermIndex(entry.Key);
    var wordFreq = entry.Value;
    // ........
    // ........
 }
您应该更改:

...
var wordFreq = entry.Value;
...
致:


因为这是foreach中的对象,所以entry在lambda表达式的范围内。
entry=>GetTermIndex(entry.Key)
是lambda函数。它的传入参数“entry”和传出参数的类型等于返回类型GetTermIndex method

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;
            ........
            ........
        }

实际上,它不是完全等价的(至少应该添加方法调用),而是+1
        foreach (var entry in freq)
        {
            var termIndex = GetTermIndex(entry.Key));
            var wordFreq = entry.Value;
            ........
            ........
        }