Vb.net 如何从列表中仅选择非空对象
我有一个Pump类型的对象列表,每个对象都包含一个对Valve类型对象的引用,通过其属性Valve公开Vb.net 如何从列表中仅选择非空对象,vb.net,linq,list,Vb.net,Linq,List,我有一个Pump类型的对象列表,每个对象都包含一个对Valve类型对象的引用,通过其属性Valve公开 Public Class Pump Private _valve As Valve 'may be Nothing Public ReadOnly Property Valve() As Valve Get Return _valve End Get End Property End Class 然而,阀门
Public Class Pump
Private _valve As Valve 'may be Nothing
Public ReadOnly Property Valve() As Valve
Get
Return _valve
End Get
End Property
End Class
然而,阀门可以存在,也可以什么都不是
有没有一种简单的方法可以选择所有阀门并将其放入列表中?
我试过这个:
_pumps.Select(Of Valve)(Function(p As Pump) p.Valve).ToList
但我得到了一份清单,其中一些物体什么都没有,因为对应的泵没有阀门
我终于做到了:
Dim valves As New List(Of Valve)
For Each p As PumpIn _pumps
If p.Valve IsNot Nothing Then
valves.Add(p.Valve)
End If
Next
但我想知道是否有更简洁的方法:
谢谢 我认为以下几点会有所帮助:
_pumps.Where(Function(p) p.Valve IsNot Nothing).Select(Of Valve)(Function(p As Pump) p.Valve).ToList
Where子句应该检查null valve not null pump。@您是对的,我更改了它,不过我认为在这种情况下,否决票有点太苛刻了。;-)是的,你在正确的轨道上,现在已经修好了。改为向上投票:-)还有一件事要注意,你可以只写
。选择(函数(p)p.Valve)
,而不使用(阀门)
和作为泵的部件,这些部件是多余的。@meta knight我知道,这是我将如何编写的,但我想将更改保持在最低限度。