如何从列表中仅选择非空对象

时间:2014-08-29 12:16:29

标签: 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

然而,阀门可以存在或只是没有。

有一种简单的方法可以选择所有阀门并将它们列入清单吗?

我试过了:

_pumps.Select(Of Valve)(Function(p As Pump) p.Valve).ToList

但是我得到一个列表,其中一些物体是Nothing,因为没有阀门与相应的泵相对应。

我终于做到了:

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

但我想知道是否有更紧凑的方式:

谢谢!

1 个答案:

答案 0 :(得分:3)

我认为以下内容会有所帮助:

_pumps.Where(Function(p) p.Valve IsNot Nothing).Select(Of Valve)(Function(p As Pump) p.Valve).ToList