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
答案 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)
...