更新1对象似乎也会更新另一个对象。 VB.Net

时间:2010-07-27 13:49:31

标签: vb.net pointers web object session-variables

我在我的网站中遇到问题,我在会话中有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集合。就好像它们之间存在某种链接或指针。

有什么想法吗?

干杯。

1 个答案:

答案 0 :(得分:1)

问题在于保存代码中的这一行:

bookingContext.Travellers = personSearchContext.SelectedTravellers

您正在做的是在personSearchContext对象中引用SelectedTravellers集合,并在bookingContext对象中分配对Travelers集合的引用。此赋值意味着bookingContext.Travellers不再是personSearchContext.SelectedTravellers的单独集合。它们现在都是对内存中同一个对象的引用。