这是两个相同的对象,但我的条件是进入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是相同的对象,但来自两种不同的方法或函数。
答案 0 :(得分:2)
默认情况下,您在这里处理引用相等性。因此,通过引用相等,它将检查您是否确实拥有相同的对象 - 这意味着b和b1在内存中是相同的对象,而不仅仅是等效的,无论对baObject来说意味着什么。
您可以在该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 ;我需要重载那些。