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

为何未调用方法时List(Of T)中元素全部被最后添加对象替换?

问题原因与解决方案:List中所有对象属性相同的问题

问题原因

你遇到的核心问题是引用类型的特性。在VB.NET中,gps.xEvent属于引用类型(类),你在循环外部仅创建了一个xEvent实例。每次循环时,你只是修改这个单一实例的属性值,然后将同一个实例的引用添加到列表中。由于列表存储的是对象引用而非对象本身,最终所有列表元素指向的都是同一个xEvent对象,自然会呈现出最后一次修改后的属性值。

解决方案

必须在每次循环内部创建新的gps.xEvent实例,这样每个元素都是独立的对象,修改属性时不会互相影响。修改后的核心代码如下:

Dim xEventList As New List(Of gps.xEvent)
xEventList.Clear()

While reader.Read()
    ' 每次循环创建全新的xEvent实例
    Dim xEvent As New gps.xEvent

    Timestamp = reader("timestamp").ToString()
    Patente = reader("Patente").ToString.ToUpper
    FechaHora = reader("Fecha")
    Latitud = String.Format("{0:'+'00.00000;'-'00.00000}", reader("latitude"))
    Longitud = String.Format("{0:'+'000.00000;'-'000.00000}", reader("longitude"))
    Velocidad = Convert.ToString(reader("speedKPH"))
    Sensor1 = Convert.ToString(reader("Temp1"))

    xEvent.asset = Patente
    xEvent.code = xEvento
    xEvent.date = FechaHora
    xEvent.latitude = Latitud
    xEvent.longitude = Longitud
    xEvent.speed = Velocidad
    xEvent.temperature = Sensor1
    xEventList.Add(xEvent)
End While

说明

将xEvent的实例化代码移到循环内部后,每次迭代都会生成一个独立的gps.xEvent对象。修改每个对象的属性并添加到列表时,列表中存储的是不同对象的引用,最终每个元素都会保留各自的属性值,不会出现全部元素相同的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:02:48