Что за дело с этой лямбдой? - PullRequest
0 голосов
/ 28 января 2009
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, когда ничего не выбрано. Предполагается, что лямбда возвращает true, только если выбран 1 элемент. Окно сообщений должно запускаться только при выборе> 1 элементов. Я получаю окно сообщения, даже когда ни один элемент не выбран.

Решение ~ Решил бросить лямбду и перейти на старую школу

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 ]

2 голосов
/ 28 января 2009

Ваша лямбда-функция (проверяет, выбран ли ОДИН элемент) и ваша заявленная цель (окно сообщения запуска, если выбрано> 1 элемента) не являются взаимоисключающими. Ни один из них не охватывает случай, когда НЕТ элементов выбрано.

Так что, если ни один элемент не выбран, то «x = 1» является ложным, поэтому оператор «If» не выполняется, и вы попадаете в окно сообщения.

Как насчет письма

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

??

2 голосов
/ 28 января 2009

Оператор = тянет двойную обязанность и для назначения и для равенства в VB.Net. Возможно ли, что это неправильно интерпретируется как задание здесь? Попробуйте вместо этого:

Dim count As Func(Of Integer, Boolean) = Function(x As Integer) Return x = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...