Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何从列表中仅选择非空对象_Vb.net_Linq_List - Fatal编程技术网

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

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 然而,阀门

我有一个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
但我得到了一份清单,其中一些物体什么都没有,因为对应的泵没有阀门

我终于做到了:

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我知道,这是我将如何编写的,但我想将更改保持在最低限度。