如何使用asp.net mvc比较两个对象

本文关键字:两个 对象 比较 何使用 asp net mvc | 更新日期: 2023-09-27 18:09:44

这是两个相同的对象,但我的条件是进入else块。如何比较两个对象值相同或不?

baObject b = new baObject();
baObject b1 = new baObject();
if (object.Equals(b, b1))
{
   // Equal
}
else
{
   // not equal
}

这种行为如何?

var t1 = repo.Model_Test_ViewAllBenefitCodes(2)
         .OrderBy(p => p.ba_Object_id)
         .ToArray();//.FirstOrDefault();
var t2 = x.ViewAllBenefitCodes
         .OrderBy(p => p.ba_Object_id)
         .ToArray();//.FirstOrDefault();

这里t1和t2是相同的对象,但从两个不同的方法或函数获得

如何使用asp.net mvc比较两个对象

默认情况下,这里处理的是引用相等。通过引用相等,它会检查你是否有相同的对象,这意味着b和b1在内存中是相同的对象,而不仅仅是相等的,不管这对baObject来说意味着什么。

请参阅此MSDN参考

你可以看到在MSDN引用的底部你可以定义你自己的operator==的实现这样你就可以做这样的事情:

if (a1 == a2)

,其中a1和a2是您创建的某种类型的对象。使它们相等的是由你决定的——例如,如果它们具有可以比较的某些属性。

回到引用相等-如果你做了这样的事情:

baObject b = new baObject();
baObject b1 = b;
if (object.Equals(b, b1))

的值为真,因为b和b1实际上是同一个对象。但由于这可能不是您所追求的,因此您可以为baObject类定义operator==,然后比较它们是否相等。你可以这样做:

public static bool operator ==(baObject b1, baObject b2) {
  return b1.foo == b2.foo && b1.bar == b2.bar;
}

定义等效对baObject的意义

您可以重写Equals()或==以任何您喜欢的方式比较对象(即具有相同的ID属性)。

这样可以控制两个对象何时应该被认为是相等的。

我怀疑它们是相同的对象。否则Object.equals()将返回true。

Equals的默认实现支持引用类型,以及值类型的按位相等。参考相等意味着被比较的对象引用引用相同的对象。按位相等意味着被比较的对象具有相同的二进制表示。

注意,派生类型可能会覆盖要实现的Equals方法平等的价值。值相等意味着比较对象具有相同的值,即使它们有不同的二进制表示。为例如,考虑两个表示数字1.10的Decimal对象和1.1000。Decimal对象不具有位相等性,因为它们有不同的二进制表示来解释不同数量的尾零。然而,对象是有价值的相等是因为数字1.10和1.1000被认为是相等的用于比较,因为后面的零是不重要的。

要实现您向我们解释的内容,您最好使用重写Equals方法,也要使用==和!=操作符,我们需要重载它们。