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

VB中List(Of ClassType)调用Add无报错但未添加元素问题

VB List(Of T) 添加元素后Count始终为0的排查方案

针对你遇到的VTLData类中Orders列表添加元素后Count保持为0的问题,按以下优先级排查:

1. 检查Orders属性的定义与初始化

这是最常见的原因:如果属性的Get访问器每次返回新的List实例,或者属性未在构造函数/声明时初始化,会导致添加操作仅作用于临时实例,后续访问时又拿到空列表。

错误示例:

Public Class VTLData
    ' 每次获取Orders都返回新实例,添加的元素不会被保留
    Public ReadOnly Property Orders As List(Of RecordData)
        Get
            Return New List(Of RecordData)()
        End Get
    End Property
End Class

修正方案:

  • 方式一:声明属性时直接初始化
Public Class VTLData
    Public Property Orders As List(Of RecordData) = New List(Of RecordData)()
End Class
  • 方式二:在类的构造函数中初始化
Public Class VTLData
    Public Property Orders As List(Of RecordData)
    Public Sub New()
        Orders = New List(Of RecordData)()
    End Sub
End Class

2. 确认VTLList中对应索引的VTLData实例未被替换

如果在调用Orders.Add()之后,DB.VTLList(VTLIndex)被重新赋值为新的VTLData对象,之前添加的元素会随旧实例被销毁。排查代码中是否存在以下逻辑:

DB.VTLList(VTLIndex).Orders.Add(DB.data)
' 后续代码错误地替换了实例
DB.VTLList(VTLIndex) = New VTLData()

解决:确保在添加元素前后,VTLList对应索引的实例保持不变,避免不必要的重新赋值。

3. 检查自定义PushOrder方法的实现

如果PushOrder方法内部没有正确操作类的Orders属性,而是创建了局部列表或错误地处理引用,会导致元素未被添加到目标列表。

错误示例:

Public Sub PushOrder(data As RecordData)
    ' 创建了局部列表,没有关联到类的Orders属性
    Dim tempList As New List(Of RecordData)()
    tempList.Add(data)
End Sub

修正方案:

Public Sub PushOrder(data As RecordData)
    ' 先确保Orders已初始化
    If Orders Is Nothing Then
        Orders = New List(Of RecordData)()
    End If
    Orders.Add(data)
End Sub

4. 验证数据类型匹配与Option Strict设置

如果DB.data的类型不是RecordData,且Option Strict设为Off,VB会尝试隐式转换,可能导致添加的元素未正确存入列表(甚至在某些情况下无报错)。

解决:开启Option Strict On(在项目设置或文件顶部添加Option Strict On),强制类型检查,确保DB.data的类型与List(Of RecordData)的元素类型完全匹配。

5. 排查并发/多线程问题(如果涉及)

如果程序使用多线程或异步操作,可能存在添加操作与Count读取不在同一线程,或列表未做线程安全处理的情况。此时需确保对Orders列表的操作是线程安全的,比如使用SyncLock锁定列表:

SyncLock DB.VTLList(VTLIndex).Orders
    DB.VTLList(VTLIndex).Orders.Add(DB.data)
End SyncLock

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:01:18