2014-08-29 42 views
1

我有一個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 

但我得到一個清單,有些是沒有對象的,因爲沒有閥門asigned給記者泵。

我終於做到了這一點:

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 

但我不知道是否有這樣做的更緊湊的方式:

謝謝!

回答

3

我認爲有以下幫助:

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

WHERE子句應檢查不爲空閥泵空。 – 2014-08-29 18:39:07

+0

@ meta-knight你是對的,我改變了它,雖然我認爲downvote在這種情況下有點過於苛刻。 ;-) – 2014-08-29 18:42:56

+0

是的,你是在正確的軌道上,現在它是固定的。 Upvoted改爲:-)另外需要注意的是,您可以在沒有「(閥門)」和「As Pump」部件的情況下編寫'.Select(Function(p)p.Valve)',這些部件是多餘的。 – 2014-08-29 18:56:24