我有两个清单。两者都是由我定义的结构组成,这个循环用于转换两者。即,转换然后添加到另一个类型的第二个列表。这就是我所拥有的:
Dim tempList As New List(Of CameraTemplateProduct)
tempList.Clear()
For j As Integer = 0 To EditCamerasNEW.templateList.Count - 1
'Set up product object.
Dim temp As New CameraTemplateProduct()
'equal properties
temp.Name = EditCamerasNEW.templateList.Item(j).mac
temp.Bitrate = EditCamerasNEW.templateList.Item(j).bitrate
temp.CamDate = EditCamerasNEW.templateList.Item(j).camdate
temp.CamTime = EditCamerasNEW.templateList.Item(j).camtime
temp.Encoder = EditCamerasNEW.templateList.Item(j).encoder
temp.FPS = EditCamerasNEW.templateList.Item(j).fps
temp.Hostname = EditCamerasNEW.templateList.Item(j).hostname
temp.MD = CBool(EditCamerasNEW.templateList.Item(j).MDen)
temp.OSD = CBool(EditCamerasNEW.templateList.Item(j).OSD)
temp.Resolution = EditCamerasNEW.templateList.Item(j).res
tempList.Add(temp)
Next
'Serialize object to a text file.
Dim x As New XmlSerializer((tempList.GetType))
x.Serialize(objStreamWriter, tempList)
非常直截了当。复制每个属性,然后将其添加到列表中。当我在循环中时,temp的值复制得很好。这些值与TemplateList中的项完全相同。当我逐步完成循环时,tempList正是我所期望的。三种不同的结构。但是在病房之后,我得到完全相同数量的物品,但是我的列表中有一个物品的副本。
但是,在下一个循环之后右行,tempList与templateList完全相同,但每个值都完全相同。所以每个项目都有相同的名称,MD,编码器等值。
我尝试了什么:我尝试在下一行之后更改
Dim x As New XmlSerializer((GetType(List(Of CameraTemplateProduct))))
但它给出了相同的结果。
我做错了什么?是否有“templist.gettype”正在做什么导致这个?
修改 我发现temp在循环时不会改变属性值,因此它会一直停留在第一个循环值上。是否有更好的方法来清除或设置它?我尝试将其设置为Nothing,但它给了我NULL赋值错误。
EDIT2:所以在评论之后, 我检查了模板列表项是否在变化。我添加了一个
Dim test = EditCamerasNEW.templateList(j).mac
为每个循环看它发生了变化。价值确实发生了变化。如上所述,我将“templatelist.item(j).x”的其余部分设置为“templatelist(j)”,但它并没有阻止它创建重复值列表。
EDIT3 尝试以下方法无济于事。我在想我可能会创建班级的临时列表。它可能不知道如何创建产品列表?我会对此提供任何帮助。
tempList.Add(New CameraTemplateProduct With {.Name = EditCamerasNEW.templateList(j).mac, _
.Bitrate = EditCamerasNEW.templateList(j).bitrate, _
.CamDate = EditCamerasNEW.templateList(j).camdate, _
.CamTime = EditCamerasNEW.templateList(j).camtime, _
.Encoder = EditCamerasNEW.templateList(j).encoder, _
.FPS = EditCamerasNEW.templateList(j).fps, _
.Hostname = EditCamerasNEW.templateList(j).hostname, _
.MD = EditCamerasNEW.templateList(j).MDen, _
.OSD = EditCamerasNEW.templateList(j).OSD, _
.Resolution = EditCamerasNEW.templateList(j).res})
这是CameraTemplateProduct定义的一部分。这很正常:
Public Class CameraTemplateProduct
Public Shared strhostname As String
Public Shared bOSD As Boolean
Public Shared strbitrate As String
Public Shared strencoder As String
Public Shared bMDen As Boolean 'motion detection enabled
Public Shared strres As String
Public Shared intfps As Integer
Public Shared strcamtime As String
Public Shared strcamdate As String
Public Shared strTemplateName As String
'grab properties
Public Property Name() As String
Get
Name = strTemplateName
End Get
Set(ByVal Value As String)
strTemplateName = Value
End Set
End Property
Public Property Hostname() As String
Get
Hostname = strhostname
End Get
Set(ByVal Value As String)
strhostname = Value
End Set
End Property
Public Property OSD() As Boolean
Get
OSD = bOSD
End Get
Set(ByVal Value As Boolean)
bOSD = Value
End Set
End Property
' code continues