【问题标题】:For each loop not skipping items对于每个循环不跳过项目
【发布时间】:2011-09-09 06:23:54
【问题描述】:

对于这个特定的示例,我在 vb.net 中有一个 for each 循环,列表中有 2 项,但在第一项之后循环退出,代码中有错误

Public Function findUserID(ByVal list As List(Of KeyValuePair(Of String, String)), ByVal value As String)
    Dim id As String = String.Empty
    For Each kvp  In list
        If (kvp.Value = value) Then
            id = kvp.Key
        End If
    Next
    Return id
End Function

【问题讨论】:

  • 您能否澄清您的问题,并告诉我们您遇到了什么异常,或者返回的结果与您的预期相比是什么?
  • 需要在这里提供更多信息,kvp.value 包括什么?
  • 也不例外,现在它循环通过第一个kvp然后返回一个空字符串,它不会尝试检查第二个值

标签: vb.net for-loop foreach


【解决方案1】:

尝试使用这个:

dim kvp as KeyValuePair
kvp = list.Find(p=>p.Value = value))
if kvp = null then return "" else return kvp.Key

一位用户告诉我以这种方式修改它:

dim kvp = list.Find(Function(e) e.Value = value)
If kvp Is Nothing Then Return "" Else Return kvp.Key

对不起,如果这段代码有一些错误,但我不能尝试,我通常用 C# 编写。
所以我的代码(在 C# 中)是:

KeyValuePair kvp = list.Find(p=>p.Value == value));
return kvp == null ? "" : kvp.Key;

【讨论】:

  • 我还没有解决问题,第二块代码运行正常但没有返回结果
  • @user936233: 你确定你列表中的数据是正确的吗?代码是正确的,所以如果结果为空,可能之前应该有错误...
  • 原来列表中的数据包含额外的空格,我猜因为只有两个结果,所以代码可以评估两者,而不必再次通过 for each 循环
  • 这段代码更好,看起来更高效,感谢您的帮助
【解决方案2】:

为什么你有 id 变量并且如果你发现一个有效的 Key 不直接返回? 所以集合会循环遍历所有的 KeyValuePairs 而不会停止任何结果。

Public Function FindUserID(ByVal list As List(Of KeyValuePair(Of String, String)), ByVal value As String)
    For Each kvp In list
        If (kvp.Value = value) Then
            Return kvp.Key
        End If
     Next
End Function

但这不是错误,您是否调试了方法并验证列表中有多个KeyValuePairs?

【讨论】:

  • 是的,调试器验证列表中有多个 KeyValuePairs
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2016-09-23
  • 2014-07-30
  • 1970-01-01
相关资源
最近更新 更多