对于我自己的Equals()方法的实现,我想检查一堆内部字段。我这样做:..._myNullableInt==obj._myNullableInt&&_myString==obj._myString&&...我会假设,这会比较值(包括null)是否相等而不是对象地址(作为引用相等性比较操作),因为:“预定义值类型”是这样说的inthisMSDNdochere.我假设Nullable是这样一种“预定义值类型”,因为它在System中命名空间根据thisMSDNdoc.我假设此处比较值是否正确?注意:单元测试显示"is",但我想通过这个问题让其他人放心,以防我遗漏了什么。
假设我有一个通用的MyClass需要比较两个类型的对象.通常我会做类似...voidDoSomething(To1,To2){if(o1.Equals(o2)){...}}现在假设我的MyClass有一个支持传递自定义IEqualityComparer的构造函数,类似于Dictionary.在那种情况下,我需要做...privateIEqualityComparer_comparer;publicMyClass(){}publicMyClass(IEqualityComparercomparer){_comparer=comparer;}voidDoSomething(To1,To2)
我第一次在VisualStudioC#中编写测试用例,我有一个返回对象列表的方法,我想使用Assert.AreEqual()方法。我尝试这样做,但即使两个对象相同,断言也会失败。我想知道这个方法,两个参数是比较引用还是比较对象的内容,我是否必须重载==运算符才能使其正常工作? 最佳答案 这些答案对于这个问题来说太复杂了。比较两个列表不需要覆盖,也不需要分解多个断言。Microsoft使用以下类CollectionAssert。CollectionAssert.AreEqual(expectedList,actualList)这适用于
对于Point2类,以及以下等于:publicoverrideboolEquals(objectobj)publicboolEquals(Point2obj)这是EffectiveC#3中显示的那个:publicoverrideboolEquals(objectobj){//STEP1:Checkfornullif(obj==null){returnfalse;}//STEP3:equivalentdatatypesif(this.GetType()!=obj.GetType()){returnfalse;}returnEquals((Point2)obj);}publicboolEq
喜欢什么:Assert.That(obj.Foo,Is.EqualTo(true))或Assert.True(obj.Foo)对我来说,这两个断言是等价的,那么应该首选哪个? 最佳答案 在这种特殊情况下,没有区别:您将看到大致相同详细程度的输出(即它告诉您预期评估为true的内容已评估为假)。同样适用于Assert.IsTrue(obj.Foo);和Assert.That(obj.Foo,Is.True);您的团队应该选择一种断言风格,并在所有测试中坚持使用它。如果您的团队更喜欢Assert.That风格,那么您应该使用Assert
我正在使用LINQ搜索我的EntityFramework表之一,并根据名称找到一个“组”。名称是一个字符串,似乎是Unicode(据说它在edmx中)。我有一个方法GetGroup()并且我传入一个名称来搜索。通过代码调试,我的数据库中已经有一个名为“Test”的组。一旦我传入一个名为“TEST”的组,我希望它返回数据库中已经存在的“Test”。由于某种原因,它没有找到“测试”并认为“测试”不存在。这是我的查询,我不明白为什么它不起作用。请帮忙。“name”是传入的组名。我的.Equals似乎只有在gr.Name和名称完全相同时才有效。如果一个字符在两个字符串之一中是大写,则.Equa
我应该在什么时候对代码契约进行调试断言,反之亦然?我想检查一种方法的先决条件,但我很困惑要选择一个而不是另一个。我有单元测试,我想在其中测试失败场景并期望出现异常。在同一个方法上使用Debug.Assert和Code契约是一种好的做法吗?如果是这样,代码的编写顺序应该是怎样的?Debug.Assert(parameter!=null);Contract.Requires(parameter!=null,"parameter");或Contract.Requires(parameter!=null,"parameter");Debug.Assert(parameter!=null);背后
设A是一个类,其中一些成员为x、y、z:ClassA{intx;inty;Stringz;...}A是一个对象,因此它继承了对象中定义的“等于”函数。这个函数的默认行为是什么?它是检查成员的相等性还是检查引用的相等性? 最佳答案 ThedefaultimplementationofEqualssupportsreferenceequalityforreferencetypes,andbitwiseequalityforvaluetypes.Referenceequalitymeanstheobjectreferencesthatar
是使用staticObject.Equals的代码检查空值比使用==运算符或regularObject.Equals的代码更健壮?后两者不是很容易被覆盖,以至于检查null不能按预期工作(例如,当比较值为null时返回false)?换句话说,是这样的:if(Equals(item,null)){/*DoSomething*/}比这更强大:if(item==null){/*DoSomething*/}我个人觉得后一种语法更容易阅读。在编写处理作者控制之外的对象(例如库)的代码时是否应该避免?是否应该始终避免(检查空值时)?这只是头发split吗? 最佳答案
这个问题在这里已经有了答案:C#differencebetween==andEquals()(20个答案)关闭8年前。对于值类型、引用类型和字符串,a.Equals(b)和a==b之间有什么区别?似乎a==b对字符串工作得很好,但我正在尝试确保使用良好的编码实践。