也许这是漫长的一天,但我就是想不通。
我从 WCF 检索一个大型自定义对象,并将其存储在应用程序变量中。这种情况每 20 分钟发生一次。
对于每个 Web 用户,我正在检查此应用程序变量的存在和超时,如果需要,重新查询我的 wcf 并构建一个新对象,并将其重新存储在应用程序变量中。
这一切都很好。
现在,我正在尝试“复制”这个“主”对象,对其进行修改,并将其存储在会话变量中,并在整个会话生命周期中根据需要对其进行修改。(修改会话变量)。
每次我修改会话对象时,应用程序变量中的对象都会被修改。
伪
application("mastervar") = object from wcf (obejct type - xcustomclass)
dim mynewobject as new xcustomclass
mynewobject = application("mastervar")
*修改 mynewobject,同时修改 application("mastervar")
我努力了:
session("mynewSessionVar") = application("mastervar")
mynewobject = session("mynewSessionVar")
修改 mynewobject,修改 application("mastervar")
我努力了:
使用 for 循环手动将 mastervar 对象中的所有属性复制到新对象。
mycustomobject = new xcustomclass
mycustomobjectObject as new xcustomclass.object
mymasterobject = application("mastervar")
for each object in mymasterobject.objectslist
mycustomobjectObject = new xcustomclass.object
with mycustomobjectObject
.property = object.property
end with
mycustomobject.objectlist.add(mycustomobjectObject)
next
同样的事情,修改 mycustomobject,也修改 application("mastervar")
正如我所说,也许这是漫长的一天,但我已经为此撞了几个小时......
编辑
Private Function copy_fresh_units(unitsFromWcf As WebResortUnits) As WebResortUnits
Dim myFreshUnits As New WebResortUnits
Dim myFreshUnit As WebResortUnits.qbunit
For Each Unit In unitsFromWcf.resortUnits
myFreshUnit = New WebResortUnits.qbunit
With myFreshUnit
' .Availability = Unit.Availability
.mapDetails = Unit.mapDetails
End With
myFreshUnits.resortUnits.Add(Unit)
Next
return myFreshUnits
End Function
修改 myfreshUnits 中的可用性属性,它仍然会更新 app var。我已经查看了引用和值类型,这绝对是我的问题。但是考虑到这个 alst 编辑,我知道我遗漏了一些东西,它是什么,我不确定...... :-)