这个Lambda的交易是什么?

时间:2009-01-27 21:54:22

标签: vb.net lambda

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返回网格中标记为checkemarked的项目数。如果未选择任何内容,则返回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 个答案:

答案 0 :(得分:2)

=运算符为VB.Net中的赋值和相等赋予双重任务。它是否有可能被错误地解释为赋值?试试这个:

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

答案 1 :(得分:2)

您的lambda函数(检查是否选择了一个项目)和您声明的目标(如果选择了> 1项,则运行消息框)不是互斥的。当没有选择任何项目时,都不包括案例。

因此,如果没有选择任何项目,则“x = 1”为false,因此“If”语句失败,您将进入消息框。

写作怎么样

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

...