草庐IT

triple-equals

全部标签

c# - 为什么集合有单独的 equals 方法?

在CSharp.NET中有一个Equals方法和一个SetEquals方法。哪里不一样了?来自Java,我的第一个想法是SetEquals不是必需的,只需对所有对象使用Equals方法即可。 最佳答案 SetEquals不遵守与Equals相同的契约(Contract).特别是它不是对称的,因为参数只是IEnumerable而不是ISet.这允许您在只有一个集合时检查集合是否相等。考虑:ListintList=newList{1,2,3};HashSetintSet=newHashSet(intList);现在我们可以使用:Cons

c# - 在自定义对象集合上使用 LINQ 时,IEquatable<T>、IEqualityComparer<T> 和覆盖 .Equals() 之间的区别?

在比较自定义对象的两个集合时,我在使用Linq的.Except()方法时遇到了一些困难。我从Object派生了我的类并为Equals()实现覆盖,GetHashCode()和运算符==和!=.我还创建了一个CompareTo()方法。在我的两个集合中,作为调试实验,我从每个列表中取出第一项(重复)并将它们进行如下比较:itemListA[0].Equals(itemListB[0]);//trueitemListA[0]==itemListB[0];//trueitemListA[0].CompareTo(itemListB[0]);//0三种情况下,结果都如我所愿。然而,当我使用Li

c# - 什么时候 a == b 可以为假而 a.Equals(b) 为真?

我今天遇到了这种情况。我有一个正在测试是否相等的对象;Create()方法返回MyObject的子类实现。MyObjecta=MyObject.Create();MyObjectb=MyObject.Create();a==b;//isfalsea.Equals(b);//istrue请注意,我还在子类实现中覆盖了Equals(),它会进行非常基本的检查,以查看传入的对象是否为null以及是否属于子类的类型。如果满足这两个条件,则认为对象相等。另一个有点奇怪的是我的单元测试套件做了一些类似的测试Assert.AreEqual(MyObject.Create(),MyObject.Cre

c# - ReSharper 格式化 : align equal operands

NotetoGooglers,thisquestionissomewhatoutofdateastherequestedfeatureisnowsupportedinthecurrentversionofReSharper2017.3.1我喜欢格式化我的代码以对齐相等操作数的右侧。喜欢这里:boolcanRead=false;boolcanReadClass=true;stringclassName=boType.Name;我最近切换到ReSharper,发现它非常有用,但找不到允许我按照描述的方式格式化代码的选项。不知道有没有这样的选项/插件?也许您知道ReSharp解决方案允许这样

c# - Nullable<int> 是 "Predefined value type"- 或者 Equals() 和 == 在这里如何工作?

对于我自己的Equals()方法的实现,我想检查一堆内部字段。我这样做:..._myNullableInt==obj._myNullableInt&&_myString==obj._myString&&...我会假设,这会比较值(包括null)是否相等而不是对象地址(作为引用相等性比较操作),因为:“预定义值类型”是这样说的inthisMSDNdochere.我假设Nullable是这样一种“预定义值类型”,因为它在System中命名空间根据thisMSDNdoc.我假设此处比较值是否正确?注意:单元测试显示"is",但我想通过这个问题让其他人放心,以防我遗漏了什么。

c# - EqualityComparer<T>.Default 与 T.Equals

假设我有一个通用的MyClass需要比较两个类型的对象.通常我会做类似...voidDoSomething(To1,To2){if(o1.Equals(o2)){...}}现在假设我的MyClass有一个支持传递自定义IEqualityComparer的构造函数,类似于Dictionary.在那种情况下,我需要做...privateIEqualityComparer_comparer;publicMyClass(){}publicMyClass(IEqualityComparercomparer){_comparer=comparer;}voidDoSomething(To1,To2)

c# - 如何最好地为自定义类型实现 Equals?

对于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

c# - String.Equals() 没有按预期工作

我正在使用LINQ搜索我的EntityFramework表之一,并根据名称找到一个“组”。名称是一个字符串,似乎是Unicode(据说它在edmx中)。我有一个方法GetGroup()并且我传入一个名称来搜索。通过代码调试,我的数据库中已经有一个名为“Test”的组。一旦我传入一个名为“TEST”的组,我希望它返回数据库中已经存在的“Test”。由于某种原因,它没有找到“测试”并认为“测试”不存在。这是我的查询,我不明白为什么它不起作用。请帮忙。“name”是传入的组名。我的.Equals似乎只有在gr.Name和名称完全相同时才有效。如果一个字符在两个字符串之一中是大写,则.Equa

c# - Equals Method 的默认行为是什么?

设A是一个类,其中一些成员为x、y、z:ClassA{intx;inty;Stringz;...}A是一个对象,因此它继承了对象中定义的“等于”函数。这个函数的默认行为是什么?它是检查成员的相等性还是检查引用的相等性? 最佳答案 ThedefaultimplementationofEqualssupportsreferenceequalityforreferencetypes,andbitwiseequalityforvaluetypes.Referenceequalitymeanstheobjectreferencesthatar

c# - Equals(item, null) 或 item == null

是使用staticObject.Equals的代码检查空值比使用==运算符或regularObject.Equals的代码更健壮?后两者不是很容易被覆盖,以至于检查null不能按预期工作(例如,当比较值为null时返回false)?换句话说,是这样的:if(Equals(item,null)){/*DoSomething*/}比这更强大:if(item==null){/*DoSomething*/}我个人觉得后一种语法更容易阅读。在编写处理作者控制之外的对象(例如库)的代码时是否应该避免?是否应该始终避免(检查空值时)?这只是头发split吗? 最佳答案