Vb.net 使用Lambda表达式求和计数
我有一个Vb.net 使用Lambda表达式求和计数,vb.net,lambda,Vb.net,Lambda,我有一个List(of T)其中T有一个属性,它是一个复选框列表,我需要的是一个Lambda表达式,它将计算列表中所有选中的复选框 我试过: Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count) 但这并没有奏效。有什么建议吗 Dim b As New List(Of Boolean) b.AddRange({True, False, True}) Dim n = b.Sum(Func
List(of T)
其中T
有一个属性,它是一个复选框列表,我需要的是一个Lambda表达式,它将计算列表中所有选中的复选框
我试过:
Me.list.Sum(Function(objT) objT.CheckBoxes.Where(Function(chk) chk.Checked).Count)
但这并没有奏效。有什么建议吗
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个。无论如何,您必须告诉VBT
有一个属性复选框。因此,定义添加到列表中的类型必须实现的接口
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
(T作为ICheckBoxes)
SelectMany
。也就是说,它将复选框列表转换为简单的复选框列表。您需要使用SelectMany。像这样的东西可能有用
Dim count = (From box In objtCheckBoxes Where box.Checked Select box).Count()
Me.list.SelectMany(Function(objT) objT.Checkboxes)
.Count(Function(chk) chk.Checked)
最后,填充列表时出现问题,该列表转换为始终为0的答案。修复填充列表的方法给了我正确的答案,这意味着lambda表达式本身一直都是正确的
p.S.为所有其他答案感到抱歉,我确实都读了,所以这不是浪费时间;) “这没用”这是什么意思?错误消息或错误结果?错误消息/结果是什么?我总是得到0,但是。。。现在我修复了它,问题是列表而不是lambda。我如何结束并放弃这个问题?(最后lambda表达式正常工作)这就是我所想的。。。我为什么问这个问题。你不能放弃这个问题,你能做的就是回答你自己的问题并接受它。。为所有其他的答案感到抱歉,我都读了,所以这不是浪费时间;)
Me.list.SelectMany(Function(objT) objT.Checkboxes)
.Count(Function(chk) chk.Checked)