0

我正在尝试比较两个相同类型的对象,以查看是否进行了更改。让我解释一下这个过程:

在页面加载时填充表单。填写表格后,我将其原始数据保存在会话变量中:

newForm = FormRegistry.GetData(userID);
Session["oldForm"] = newForm;

在进行一些更改后保存表单时,我会比较这两个对象,它们总是相同的。存储在 Session["oldForm"] 中的数据与具有更改的 newForm 对象相同。

我正在使用实体框架并首先使用数据库生成对象。这只发生在具有 1-N 关系的对象上。此过程与没有任何关系的对象完美配合。

谁能告诉我发生了什么以及如何解决这个问题?

4

2 回答 2

0

几个快速的想法 - 首先我发现使用 == 运算符比较复杂对象效果不太好,应该使用object1.Equals(object2)- 然后你需要实现(即覆盖) Equals() 方法,基本上是遍历属性并比较每个。

此外,空值会妨碍您。您需要明确检查这种情况。这个 ref 很有用MSDN: Guidelines for Overloading Equals()

希望这可以帮助。

于 2013-04-04T18:54:09.957 回答
0

好吧,我想我对正在发生的事情有更多的了解——但可能是错的。我最初虽然您在每次创建新对象的请求之间保存数据并对其进行某种比较。

从听起来您正在处理在同一请求中保存之前和之后比较表单数据的情况。无论哪种方式,这听起来都是因为您实际上是在存储对您的对象的引用,您实际上是在将同一个对象与其自身进行比较。

我认为您需要查看要比较的对象的克隆。如果可以的话,序列化可能是创建对象副本的一种简单方法。

此线程可能会有所帮助:C# 对象的深层复制

于 2013-04-04T23:12:32.453 回答