2012-02-03 56 views
0

我有一個List(of T)其中T有一個屬性是一個複選框列表,我需要的是一個Lambda表達式將統計所有在列表中選中的複選框。點心和λ計數表達式

我試着用:

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

但它並沒有這樣的伎倆。有什麼建議麼?

+1

「它沒有這樣做的伎倆」是什麼意思?錯誤信息或不正確的結果?什麼是錯誤信息/結果? – 2012-02-03 19:34:10

+0

我總是得到0,但是......現在我解決了它,問題與列表而不是lambda有關。我如何關閉並放棄這個問題? (最後,lambda表達式就像它應該那樣工作) – PedroC88 2012-02-03 20:55:28

+1

這就是我認爲的...以及爲什麼我問這個問題。你不能放棄這個問題,你能做的就是回答你自己的問題並接受它。 – 2012-02-03 21:03:02

回答

0

在年底有填充其翻譯在始終爲0答案列表中的問題。修正填充列表的方法給了我正確的答案,這意味着lambda表達式本身一直都是正確的。

P.S.對不起,所有其他的答案,我看過他們所有,所以還不是浪費時間的傢伙;)

0
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

0

不知怎的,你必須告訴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平展列表的接口。即,它將複選框列表轉換爲簡單的複選框列表。

1
Dim count = (From box In objtCheckBoxes Where box.Checked Select box).Count() 
0

您將需要使用SelectMany。像這樣的東西可能會起作用。

Me.list.SelectMany(Function(objT) objT.Checkboxes) 
     .Count(Function(chk) chk.Checked)