我在我的网站中遇到问题,我在会话中有2个对象,这两个对象的结构不同,并且没有任何相互链接(非故意)。然而,这两个对象都有一组“旅行者”。我想要做的是通过添加或删除“Travelers”来修改一个集合,当单击一个完成按钮时,修改后的集合将被保存到另一个对象。
问题在于,由于某种原因,当我在一个对象中修改一个集合时,也会对另一个对象中的集合进行修改。
这是一个粗略的例子:
Dim bookingContext As BookingContext = Session("BookingContext")
Dim personSearchContext As PersonSearchContext = Session("PersonSearchContext")
Dim personId As Integer = Request.Form("PersonID")
Dim mode As String = Request.Form("Mode")
Select Case mode
Case "Add"
For Each traveller As PersonProfile In personSearchContext.Travellers
If traveller.PersonID = personId Then
personSearchContext.SelectedTravellers.Add(traveller)
Exit For
End If
Next
context.Session("PersonSearchContext") = personSearchContext
Case "Remove"
For Each traveller As PersonProfile In personSearchContext.SelectedTravellers
If traveller.PersonID = personId Then
travellerSearchContext.SelectedTravellers.Remove(traveller)
Exit For
End If
Next
context.Session("PersonSearchContext") = personSearchContext
Case "Save"
bookingContext.Travellers = personSearchContext.SelectedTravellers
context.Session("BookingContext") = bookingContext
End Select
问题是当我在“PersonSearchContext”中添加和删除集合时,正在更新对象“BookingContext”中的Travelers集合。就好像它们之间存在某种链接或指针。
有什么想法吗?
干杯。
答案 0 :(得分:1)
问题在于保存代码中的这一行:
bookingContext.Travellers = personSearchContext.SelectedTravellers
您正在做的是在personSearchContext对象中引用SelectedTravellers集合,并在bookingContext对象中分配对Travelers集合的引用。此赋值意味着bookingContext.Travellers不再是personSearchContext.SelectedTravellers的单独集合。它们现在都是对内存中同一个对象的引用。