在下面的VB.NET代码中,我想将三个人添加到人员列表中。我以为我可以一遍又一遍地使用相同的person-object,只需在下一次Add-call之前更改它的名字。我希望每个调用都应该复制对象并将该副本添加到列表中......但最终我得到了一个三个“Kim”的列表。似乎列表元素引用了同一个对象。
Class Person
Public Name As String
End Class
Sub Foo()
Dim Persons as New List(Of Person)
Dim aPerson As New Person
aPerson.Name = "John"
Persons.Add(aPerson)
aPerson.Name = "Emma"
Persons.Add(aPerson)
aPerson.Name = "Kim"
Persons.Add(aPerson)
End Sub
我可以强制在每次加入通话中复制aPerson
吗?或者我是否需要为John,Emma和Kim创建单独的对象?
答案 0 :(得分:1)
你所做的不是好习惯,因为你不应该以这种方式使用课程。
如果您的名字来自列表等来源,则可以使用For Each
循环。
Dim MyNames As New List(Of String)
MyNames.Add("John")
MyNames.Add("Emma")
MyNames.Add("Kim")
For Each person_name As String In MyNames
Dim aPerson As New Person
aPerson.Name = person_name
Persons.Add(aPerson)
Next
如果数据来自文件,SQL请求或JSON,则此方法非常实用。
否则你只会:
Dim Persons as New List(Of Person)
Dim aPerson As New Person
Dim bPerson As New Person
Dim cPerson As New Person
aPerson.Name = "John"
Persons.Add(aPerson)
bPerson.Name = "Emma"
Persons.Add(bPerson)
cPerson.Name = "Kim"
Persons.Add(cPerson)