Суммируйте счет с лямбда-выражениями - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть List(of T), где T имеет свойство, которое представляет собой список флажков, мне нужно лямбда-выражение, которое будет подсчитывать все отмеченные флажки в списке.

Я пытался с:

Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)

Но это не сработало. Есть предложения?

Ответы [ 5 ]

1 голос
/ 04 февраля 2012
Dim count = (From box In objtCheckBoxes Where box.Checked Select box).Count()
0 голосов
/ 04 февраля 2012

В конце возникла проблема с заполнением списка, который переводился в всегда 0 ответ.Исправление метода, который заполнил список, дало мне правильный ответ, что означает, что лямбда-выражение само по себе было правильно все время.так что не было времени, ребята;)

0 голосов
/ 04 февраля 2012

Вам нужно будет использовать SelectMany. Нечто подобное может сработать.

Me.list.SelectMany(Function(objT) objT.Checkboxes)
       .Count(Function(chk) chk.Checked)
0 голосов
/ 03 февраля 2012

Как-то вы должны сказать VB, что T имеет свойство CheckBoxes.Поэтому определите интерфейс, который типы, добавляемые в список, должны реализовывать

Public Interface ICheckBoxes
    ReadOnly Property CheckBoxes() As List(Of CheckBox)
End Interface

Public Class ClassWithCkeckBoxes
    Implements ICheckBoxes

    Private m_CheckBoxes As List(Of CheckBox) = New List(Of CheckBox)

    Public ReadOnly Property CheckBoxes() As List(Of CheckBox) Implements ICheckBoxes.CheckBoxes
        Get
            Return m_CheckBoxes
        End Get
    End Property
End Class

. Укажите, что T должен реализовать ICheckBoxes с параметром типа (Of T As ICheckBoxes)

Class CountCheckBoxes(Of T As ICheckBoxes)
    Public Sub Test(ByVal list As List(Of T))
        Dim count As Integer = list _
            .SelectMany(Function(t) t.CheckBoxes) _
            .Count(Function(checkBox) checkBox.Checked)
    End Sub
End Class

SelectMany сглаживает список.Т.е. он преобразует список списка флажков в простой список флажков.

0 голосов
/ 03 февраля 2012
Dim b As New List(Of Boolean)
b.AddRange({True, False, True})
Dim n = b.Sum(Function(x)
                  Return If(x, 1, 0)
              End Function)

n теперь содержит 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...