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

时间:2011-09-27 17:17:53

标签: c# .net

这是两个相同的对象,但我的条件是进入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是相同的对象,但来自两种不同的方法或函数。

3 个答案:

答案 0 :(得分:2)

默认情况下,您在这里处理引用相等性。因此,通过引用相等,它将检查您是否确实拥有相同的对象 - 这意味着b和b1在内存中是相同的对象,而不仅仅是等效的,无论对baObject来说意味着什么。

See this MSDN Reference

您可以在该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意味着什么。

答案 1 :(得分:0)

您可能override Equals() or ==以您想要的任何方式比较对象(即具有相同的ID属性)。

通过这种方式,您可以控制何时应将两个对象视为相等。

答案 2 :(得分:0)

我怀疑它们是同一个物体。否则object.equals()会返回true。

  

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

     

请注意,派生类型可能会覆盖要实现的Equals方法   价值平等。值相等意味着比较对象具有   相同的值,即使它们具有不同的二进制表示。对于   例如,考虑两个表示数字1.10的Decimal对象   和1.1000。 Decimal对象没有按位相等,因为   他们有不同的二元表示来解释   不同数量的尾随零。但是,对象具有价值   平等,因为数字1.10和1.1000被认为是相等的   比较目的,因为尾随零是无关紧要的。

为了实现您向我们解释的内容,您最好选择覆盖Equals方法,同时使用 ==和!=运算符我们&#39 ;我需要重载那些。