我试图比较相同类型的两个对象,看看是否发生了变化。让我来解释一下这个过程:
在页面加载时填充表单。当表单填好后,我将它的原始数据保存在一个会话变量中:
newForm = FormRegistry.GetData(userID);
Session["oldForm"] = newForm;
当表单经过一些更改后保存时,我比较两个对象,它们总是相同的。存储在会话["oldForm"]中的数据与发生更改的newForm对象相同。
我使用实体框架,并首先使用数据库生成对象。这只发生在有1-N关系的对象上。这个过程可以完美地处理没有任何关系的对象。
谁能告诉我发生了什么事,怎么解决这个问题?好吧,我想我对正在发生的事情有更多的了解——但可能是错的。我最初认为你在保存请求之间的数据,每次创建一个新对象,并对其进行某种比较。
从它听起来像你正在工作的比较表单数据之前和之后保存在同一个请求。无论哪种方式,听起来都像是因为你实际上是在存储对对象的引用,所以你实际上是在将同一对象与自身进行比较。
我认为你需要考虑获得一个对象的克隆来进行比较。如果可以的话,序列化可能是创建对象副本的一种简单方法。
c#对象的深度拷贝几个快速的想法-首先我发现比较复杂的对象与==操作符不太好,应该使用object1.Equals(object2)
-然后你需要实现(即覆盖)Equals()方法,基本上通过属性迭代和比较每个
同样,null也会碍事。您需要明确地检查这种情况。重载Equals()指南