草庐IT

Equality

全部标签

c# - 比较来自 Type.GetProperties() 和 lambda 表达式的 PropertyInfo

在创建我的测试框架时,我发现了一个奇怪的问题。我想创建一个静态类,允许我通过属性比较相同类型的对象,但有可能忽略其中的一些对象。我想为此提供一个简单流畅的API,所以调用TestEqualityComparer.Equals(first.Ignore(x=>x.Id).Ignore(y=>y.Name),second);如果给定对象在除Id和Name之外的每个属性上都相等,将返回true(不会检查它们是否相等)。这是我的代码。当然,这是一个微不足道的例子(缺少一些明显方法重载),但我想尽可能提取最简单的代码。真实案例场景有点复杂,所以我真的不想改变方法。FindProperty方法几乎

c# - 实现地理坐标类 : equality comparison

我正在将CodePlex中的地理坐标类集成到我的个人“工具箱”库中。此类使用float存储纬度和经度的字段。自下课GeoCoordinate工具IEquatable,我习惯性地写了Equals像这样的方法:publicboolEquals(GeoCoordinateother){if(other==null){returnfalse;}returnthis.latitude==other.latitude&&this.longitude==other.longitude;}此时我停下来考虑我正在比较浮点变量是否相等,这通常是一个禁忌。我的思考过程大致如下:我只能想象设置Latitude

c# - Object == equality 失败,但是 .Equals 成功。这有意义吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Differencebetween==operatorandEquals()methodinC#?两种形式的平等,第一种失败,第二种成功。(object)"abc"==(object)"abc"false((object)"abc").Equals((object)"abc")true在下面的引用资料中,我们看到“C#中的相等运算符不是多态的”引用:StringEqualityoperator==inc#顺便说一句:仍然不确定为什么这是个问题。我以为它可能是这样的,但不是因为这个测试成功了。staticvoi

c# - 我应该使用我的字符串字段的串联作为哈希码吗?

我在C#中有一个Address类,如下所示:publicclassAddress{publicstringStreetAddress{get;set;}publicstringRuralRoute{get;set;}publicstringCity{get;set;}publicstringProvince{get;set;}publicstringCountry{get;set;}publicstringPostalCode{get;set;}}我正在实现相等性,因此我需要覆盖哈希码。起初我打算使用EJ的哈希码公式,但后来我想:这些都是字符串字段,我不能只使用StringBuilde

c# - == 与 C# 中的等于

C#中==和Equals的计算有什么区别?例如,if(x==x++)//Alwaysreturnstrue但是if(x.Equals(x++))//Alwaysreturnsfalse编辑:intx=0;inty=0;if(x.Equals(y++))//ReturnsTrue 最佳答案 根据规范,这是预期的行为。第一个的行为受规范第7.3节的约束:Operandsinanexpressionareevaluatedfromlefttoright.Forexample,inF(i)+G(i++)*H(i),methodFiscall

c# - 为什么将两个字符串作为对象进行比较会导致意外结果

考虑以下代码。objectstr=newstring(newchar[]{'t','e','s','t'});objectstr1=newstring(newchar[]{'t','e','s','t'});Console.WriteLine(str==str1);//falseConsole.WriteLine(str.Equals(str1));//true我理解相等运算符在这里工作,因为我们已经隐式转换为对象,相等运算符正在检查两者的引用是否相等并返回false。但我对第二个感到困惑,返回true看起来它正在调用String类型提供的Equals覆盖实现,并且它检查字符串的内容是

c# - 两个相等的 .NET 对象不会说它们是

我有以下代码:objectval1=1;objectval2=1;boolresult1=(val1==val2);//Equalsfalseboolresult2=val1.Equals(val2);//Equalstrue这是怎么回事?解决此问题的唯一方法是使用.Equals()方法吗? 最佳答案 运算符==是静态的,不是虚拟的,因此行为由静态类型而不是运行时类型决定。==在引用类型对象上的默认实现是比较引用(尽管类型可以实现不同的行为,例如string).您有两个不同的对象,它们没有相同的引用,因此==返回false。正如您所

c# - 什么时候 == 会以与 .equals 不同的方式被覆盖?

我了解==和.equals之间的区别。这里还有很多其他问题可以详细解释差异,例如这个:Whatisthedifferencebetween.Equalsand==这个:Bitwiseequality等等。我的问题是:为什么要同时使用它们(我知道一定有一个很好的理由)-它们似乎都在做同样的事情(除非以不同方式覆盖)。什么时候==会以不同于.equals被覆盖的方式重载? 最佳答案 ==在编译时静态绑定(bind),因为运算符始终是静态的。您重载运算符-您无法覆盖它们。Equals(object)以多态方式执行,因为它被覆盖了。就您希望

c# - 字符串比较 : operator==() vs. Equals()

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C#:Arestring.Equals()and==operatorreallysame?对于字符串比较,哪种方法更好(且安全):strings1="Sarfaraz";strings2="Nawaz";boolresult1=(s1==s2);//approach1boolresult2=s1.Equals(s2);//approach2或者两者在底层是一样的?

c# - 如何在字符串比较中忽略 UTF-8 字节顺序标记?

我在使用VisualStudio2010的C#4.0单元测试中比较字符串时遇到问题。这个相同的测试用例在VisualStudio2008(使用C#3.5)中正常工作。这是相关的代码片段:byte[]rawData=GetData();stringdata=Encoding.UTF8.GetString(rawData);Assert.AreEqual("Constant",data,false,CultureInfo.InvariantCulture);调试此测试时,肉眼看来data字符串包含与文字完全相同的字符串。当我调用data.ToCharArray()时,我注意到字符串data