草庐IT

equals-tilde

全部标签

c# - 重载 operator== 与 Equals()

我正在开发一个C#项目,直到现在,我一直使用不可变对象(immutable对象)和工厂来确保Foo类型的对象始终可以与=进行比较=。Foo对象一旦创建就不能更改,并且工厂总是为给​​定的一组参数返回相同的对象。这很好用,在整个代码库中,我们假设==始终用于检查相等性。现在我需要添加一些功能来引入一种边缘情况,但这并不总是有效。最简单的做法是为该类型重载operator==,这样项目中的其他代码都不需要更改。但这让我觉得是一种代码味道:重载operator==而不是Equals看起来很奇怪,而且我已经习惯了==检查引用相等性,而Equals检查对象相等性(或任何术语)。这是一个合理的担忧

c# - 重载 operator== 与 Equals()

我正在开发一个C#项目,直到现在,我一直使用不可变对象(immutable对象)和工厂来确保Foo类型的对象始终可以与=进行比较=。Foo对象一旦创建就不能更改,并且工厂总是为给​​定的一组参数返回相同的对象。这很好用,在整个代码库中,我们假设==始终用于检查相等性。现在我需要添加一些功能来引入一种边缘情况,但这并不总是有效。最简单的做法是为该类型重载operator==,这样项目中的其他代码都不需要更改。但这让我觉得是一种代码味道:重载operator==而不是Equals看起来很奇怪,而且我已经习惯了==检查引用相等性,而Equals检查对象相等性(或任何术语)。这是一个合理的担忧

c# - 覆盖 Equals() 和 GetHashCode() 的正确方法

这个问题在这里已经有了答案:What'sthebeststrategyforEqualsandGetHashCode?(7个答案)关闭9年前。我以前从未真正做过这件事,所以我希望有人能告诉我为我的类(class)实现Except()和GetHashCode()覆盖的正确方法。我正在尝试修改该类,以便我可以使用LINQExcept()方法。publicclassRecommendationDTO{publicGuidRecommendationId{get;set;}publicGuidProfileId{get;set;}publicGuidReferenceId{get;set;}p

c# - 覆盖 Equals() 和 GetHashCode() 的正确方法

这个问题在这里已经有了答案:What'sthebeststrategyforEqualsandGetHashCode?(7个答案)关闭9年前。我以前从未真正做过这件事,所以我希望有人能告诉我为我的类(class)实现Except()和GetHashCode()覆盖的正确方法。我正在尝试修改该类,以便我可以使用LINQExcept()方法。publicclassRecommendationDTO{publicGuidRecommendationId{get;set;}publicGuidProfileId{get;set;}publicGuidReferenceId{get;set;}p

c# - 为什么 (object)0 == (object)0 不同于 ((object)0).Equals((object)0)?

为什么下面的表达方式不同?[1](object)0==(object)0//false[2]((object)0).Equals((object)0)//true实际上,我完全可以理解[1],因为.NET运行时可能会装箱整数并开始比较引用。但为什么[2]不同? 最佳答案 调用行为不同的原因是它们绑定(bind)到非常不同的方法。==案例将绑定(bind)到静态引用相等运算符。创建了2个独立的盒装int值,因此它们不是相同的引用。在第二种情况下,您绑定(bind)到实例方法Object.Equals。这是一个虚拟方法,它将向下过滤到I

c# - 为什么 (object)0 == (object)0 不同于 ((object)0).Equals((object)0)?

为什么下面的表达方式不同?[1](object)0==(object)0//false[2]((object)0).Equals((object)0)//true实际上,我完全可以理解[1],因为.NET运行时可能会装箱整数并开始比较引用。但为什么[2]不同? 最佳答案 调用行为不同的原因是它们绑定(bind)到非常不同的方法。==案例将绑定(bind)到静态引用相等运算符。创建了2个独立的盒装int值,因此它们不是相同的引用。在第二种情况下,您绑定(bind)到实例方法Object.Equals。这是一个虚拟方法,它将向下过滤到I

c# - 为什么重写 Equals 方法时重写 GetHashCode 很重要?

给定以下类(class)publicclassFoo{publicintFooId{get;set;}publicstringFooName{get;set;}publicoverrideboolEquals(objectobj){FoofooItem=objasFoo;if(fooItem==null){returnfalse;}returnfooItem.FooId==this.FooId;}publicoverrideintGetHashCode(){//Whichispreferred?returnbase.GetHashCode();//returnthis.FooId.Ge

c# - 为什么重写 Equals 方法时重写 GetHashCode 很重要?

给定以下类(class)publicclassFoo{publicintFooId{get;set;}publicstringFooName{get;set;}publicoverrideboolEquals(objectobj){FoofooItem=objasFoo;if(fooItem==null){returnfalse;}returnfooItem.FooId==this.FooId;}publicoverrideintGetHashCode(){//Whichispreferred?returnbase.GetHashCode();//returnthis.FooId.Ge

javascript - 使用 Mocha 进行 Javascript 测试时 assert.equal 和 assert.deepEqual 之间的区别?

我正在使用Mocha测试我的Express.js应用程序中的一个小模块。在这个模块中,我的一个函数返回一个数组。我想测试数组对于给定输入是否正确。我这样做是这样的:suite('getWords',function(){test("getWordsshouldreturnlistofnumbers",function(){varresult=['555','867','5309'];assert.equal(result,getWords('555-867-5309'));});});运行时,我收到以下断言错误:AssertionError:["555","867","5309"]==

javascript - 使用 Mocha 进行 Javascript 测试时 assert.equal 和 assert.deepEqual 之间的区别?

我正在使用Mocha测试我的Express.js应用程序中的一个小模块。在这个模块中,我的一个函数返回一个数组。我想测试数组对于给定输入是否正确。我这样做是这样的:suite('getWords',function(){test("getWordsshouldreturnlistofnumbers",function(){varresult=['555','867','5309'];assert.equal(result,getWords('555-867-5309'));});});运行时,我收到以下断言错误:AssertionError:["555","867","5309"]==