循环遍历字典并获得每个值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;
........
........
}