代码之家  ›  专栏  ›  技术社区  ›  Saif Khan

这羔羊是怎么回事?

  •  0
  • Saif Khan  · 技术社区  · 15 年前
    Dim count As Func(Of Integer, Boolean) = Function(x As Integer) x = 1
    
    If (count(GetSelectedCount())) Then
        'Proceed
    Else
        MessageBox.Show("You can only select one item at a time.", "Multiple items selected", MessageBoxButtons.OK)
    End If
    

    GetSelectedCount返回在网格中标记的项目数。未选择任何内容时返回0。仅当选择了1个项时,lambda才应返回true。只有选择了1个项目时,才应运行消息框。即使没有选择任何项目,我也会得到消息框。

    解决方案~决定放弃lambda去上老派学校

    Select Case GetSelectedCount()
        Case 1
    
        Case Is > 1
            MessageBox.Show("You can only select one item at a time.", "Multiple Selection", MessageBoxButtons.OK)
        Case Else
            MessageBox.Show("You have no items selected.", "No Selection", MessageBoxButtons.OK)
    
    End Select
    
    2 回复  |  直到 12 年前
        1
  •  2
  •   Joel Coehoorn    15 年前

    在vb.net中,=运算符为赋值和相等都拉取双值。有没有可能在这里被错误地解释为作业?请改为:

    Dim count As Func(Of Integer, Boolean) = Function(x As Integer) Return x = 1
    
        2
  •  2
  •   Eric    15 年前

    lambda函数(检查是否选择了一个项)和声明的目标(如果选择了>1个项,则运行消息框)不是互斥的。当没有选择任何项目时,两者都不涵盖此情况。

    因此,如果没有选择任何项,那么“x=1”是false,因此“if”语句失败,您将进入消息框。

    写作怎么样

    Dim count As Func(Of Integer, Boolean) = Function(x As Integer) (x <= 1)
    

    ??