为何未调用方法时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
相关产品推荐
相关产品推荐

