无法比较2个相同类型的对象

时间:2014-03-28 15:56:42

标签: vb.net

Dim obj As New CMS_Page
Dim comparisonObj As New CMS_Page

作业

obj = db.CMS_Pages.First(Function(s) s.PageID = pageID)
comparisonObj = db.CMS_Pages.First(Function(s) s.PageID = pageID)

在我的代码中间的某个地方

obj.property = sometextfield.text 'Apparently this also changes the comparisonObj

基本上我最终要做的就是

if (obj.property = comparisonObj.property) then
//...
end if

为什么我不能更改obj.Property而不更改comparisonObj.Property中的相同属性?

3 个答案:

答案 0 :(得分:1)

的结果是什么?
obj.ReferenceEquals(comparisonObj)

如果是True,则obj comparisonObj。您可以像这样更简洁地进行相同的检查,

obj Is comparisonObj

如果您有VB背景,则两个变量都是引用到同一个对象。

如果您有C背景,则两个变量都是指针到同一个对象。

实质上,该变量包含一个整数值,用于寻址内存中的对象。

答案 1 :(得分:1)

您可能正在设置“comparisonObj = obj”。你可能想要“comparisonObj = obj.Clone()”。您必须自己实施“克隆”方法。 如果CMS_Page不在您的控制之下,那么您可以创建一个扩展方法来克隆它。

答案 2 :(得分:1)

obj = db.CMS_Pages.First(Function(s) s.PageID = pageID)
comparisonObj = db.CMS_Pages.First(Function(s) s.PageID = pageID)

这两行导致对同一对象的两次引用。因此,当您执行此操作时:obj.property = sometextfield.text然后comparisonObj也会反映出此更改。