草庐IT

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吗? 最佳答案

c# - .Equals 和 == 有什么区别

这个问题在这里已经有了答案:C#differencebetween==andEquals()(20个答案)关闭8年前。对于值类型、引用类型和字符串,a.Equals(b)和a==b之间有什么区别?似乎a==b对字符串工作得很好,但我正在尝试确保使用良好的编码实践。

c# - 重写结构中的 Equals 方法

我一直在寻找结构的重写指南,但我能找到的只是类。起初我以为我不必检查传递的对象是否为空,因为结构是值类型并且不能为空。但是现在我想起来了,等于签名是publicboolEquals(objectobj)似乎没有什么可以阻止我的结构的用户尝试将它与任意引用类型进行比较。我的第二点是我(认为我)在比较我的结构中的私有(private)字段之前必须进行的转换。我应该如何将对象转换为我的结构类型?C#的as关键字似乎只适合引用类型。 最佳答案 structMyStruct{publicoverrideboolEquals(objectobj

c# - == 或 .Equals()

为什么要用一个而不是另一个? 最佳答案 ==是身份测试。如果被测试的两个对象实际上是同一个对象,它将返回true。Equals()执行相等性测试,如果两个对象认为自己相等,则返回true。身份测试速度更快,因此您可以在不需要更昂贵的相等性测试时使用它。例如,与null或空字符串进行比较。可以重载其中任何一个以提供不同的行为——比如Equals()的身份测试——但为了任何人阅读你的代码,请不要这样做。下面指出:某些类型,如String或DateTime为==运算符提供重载,赋予它相等语义。因此,确切的行为将取决于您正在比较的对象的类型

C# .Equals()、.ReferenceEquals() 和 == 运算符

我对这三者的理解是:.Equals()测试数据相等性(缺少更好的描述)。.Equals()可以为同一对象的不同实例返回True,这是最常被覆盖的方法。.ReferenceEquals()测试两个对象是否是同一个实例并且不能被覆盖。==默认情况下与ReferenceEquals()相同,但可以覆盖它。但是C#station状态:Intheobjectclass,theEqualsandReferenceEqualsmethodsaresemanticallyequivalent,exceptthattheReferenceEqualsworksonlyonobjectinstances.

c# - String.Equals(a,b) 如何不产生 StackOverflowException?

在检查String==运算符时,我注意到它调用了String.Equals(stringa,stringb),这意味着它只是一个传递。检查String.Equals(stringa,stringb)方法,我发现它使用==运算符进行相等性检查。这实际上是如何工作的,并且在执行类似"x"=="x"或"x"=="y"StackOverflowException?更新:我让JetBrains知道了,他们将其作为dotPeek的关键优先事项。https://youtrack.jetbrains.com/issue/DOTP-6789我还在ILSpy的GitHub存储库上添加了一个问题。

c# - IEquatable 和仅覆盖 Object.Equals() 之间有什么区别?

我想要我的Food类能够在它等于Food的另一个实例时进行测试.稍后我会将它用于列表,我想使用它的List.Contains()方法。我应该实现IEquatable吗?或者只是重写Object.Equals()?来自MSDN:Thismethoddeterminesequalitybyusingthedefaultequalitycomparer,asdefinedbytheobject'simplementationoftheIEquatable.EqualsmethodforT(thetypeofvaluesinthelist).所以我的下一个问题是:.NET框架的哪些函数/类使用

c# - C# 中基元的 == 和 Equals() 有什么区别?

考虑这段代码:intage=25;shortnewAge=25;Console.WriteLine(age==newAge);  //trueConsole.WriteLine(newAge.Equals(age)); //falseConsole.ReadLine();int和short都是原始类型,但是与==的比较返回true,与Equals返回false。为什么? 最佳答案 简答:平等是复杂的。详细答案:基元类型覆盖基础object.Equals(object)并在装箱的object具有相同的类型和值时返回true。(请注意,

c# - string.Equals() 和 == 运算符真的一样吗?

这个问题在这里已经有了答案:C#differencebetween==andEquals()(20个答案)关闭8年前。它们真的一样吗?今天,我遇到了这个问题。这是立即窗口的转储:?s"Category"?tvi.Header"Category"?s==tvi.Headerfalse?s.Equals(tvi.Header)true?s==tvi.Header.ToString()true因此,s和tvi.Header都包含“Category”,但是==返回false并且Equals()返回真。s定义为字符串,tvi.Header实际上是一个WPFTreeViewItem.Header。