You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中使用LINQ遍历复杂列表及LotNo存在性判断问题

VB.NET中判断复杂列表包含指定LotNumber的正确方式

你当前的问题是LotsList.Contains(selectedLot.LotNo)无法正常工作,因为Contains默认是比较对象引用——你拿字符串类型的selectedLot.LotNo和LotDTO对象直接对比,肯定匹配不上。下面是几种实用的解决方法:

方法1:使用LINQ的Any方法(推荐)

这是最直接高效的方式,直接检查集合中是否存在LotNumber等于目标值的元素:

If LotsList.Any(Function(lot) lot.LotNumber = selectedLot.LotNo) Then
    ' 执行你需要的逻辑
End If

Any方法会在找到第一个符合条件的元素时就停止遍历,性能较好,适合单次判断的场景。

方法2:提取LotNumber集合后用Contains

如果需要多次判断不同的LotNo,可以先把集合中所有LotNumber提取成字符串列表,后续直接用Contains:

' 先预提取所有LotNumber到字符串列表
Dim allLotNumbers As List(Of String) = LotsList.Select(Function(lot) lot.LotNumber).ToList()

' 后续判断直接用Contains
If allLotNumbers.Contains(selectedLot.LotNo) Then
    ' 执行逻辑
End If

这种方式适合频繁判断的场景,避免重复遍历原集合。

方法3:重写LotDTO的相等比较(不推荐除非必要)

如果你的业务场景需要频繁对比LotDTO对象是否“相等”(以LotNumber为判断依据),可以重写Equals和GetHashCode方法:

Public Class LotDTO
    Public Property LotNumber As String

    ' 重写Equals方法,以LotNumber作为相等判断依据
    Public Overrides Function Equals(obj As Object) As Boolean
        Dim targetLot = TryCast(obj, LotDTO)
        Return targetLot IsNot Nothing AndAlso targetLot.LotNumber = Me.LotNumber
    End Function

    ' 重写GetHashCode,确保相等的对象哈希码一致
    Public Overrides Function GetHashCode() As Integer
        Return LotNumber?.GetHashCode() ?? 0
    End Function
End Class

之后就可以通过创建匹配的LotDTO对象来使用Contains:

If LotsList.Contains(New LotDTO With {.LotNumber = selectedLot.LotNo}) Then
    ' 执行逻辑
End If

这种方式步骤较多,仅在需要全局统一对象相等规则时使用。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:20:28