我有一個List(of T)
其中T
有一個屬性是一個複選框列表,我需要的是一個Lambda表達式將統計所有在列表中選中的複選框。點心和λ計數表達式
我試着用:
Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)
但它並沒有這樣的伎倆。有什麼建議麼?
我有一個List(of T)
其中T
有一個屬性是一個複選框列表,我需要的是一個Lambda表達式將統計所有在列表中選中的複選框。點心和λ計數表達式
我試着用:
Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)
但它並沒有這樣的伎倆。有什麼建議麼?
在年底有填充其翻譯在始終爲0答案列表中的問題。修正填充列表的方法給了我正確的答案,這意味着lambda表達式本身一直都是正確的。
P.S.對不起,所有其他的答案,我看過他們所有,所以還不是浪費時間的傢伙;)
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
不知怎的,你必須告訴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
平展列表的接口。即,它將複選框列表轉換爲簡單的複選框列表。
Dim count = (From box In objtCheckBoxes Where box.Checked Select box).Count()
您將需要使用SelectMany。像這樣的東西可能會起作用。
Me.list.SelectMany(Function(objT) objT.Checkboxes)
.Count(Function(chk) chk.Checked)
「它沒有這樣做的伎倆」是什麼意思?錯誤信息或不正確的結果?什麼是錯誤信息/結果? – 2012-02-03 19:34:10
我總是得到0,但是......現在我解決了它,問題與列表而不是lambda有關。我如何關閉並放棄這個問題? (最後,lambda表達式就像它應該那樣工作) – PedroC88 2012-02-03 20:55:28
這就是我認爲的...以及爲什麼我問這個問題。你不能放棄這個問題,你能做的就是回答你自己的問題並接受它。 – 2012-02-03 21:03:02