草庐IT

equality

全部标签

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# - 使用 == 或 .Equals() 进行 bool 比较

我正在审查一些代码,我发现了一些看起来像这样的东西:publicclassMyClass{publicboolIsEditable{get;set;}publicvoidHandleInput(){if(IsEditable.Equals(false)){//dostuff}}}据我所知,(IsEditable.Equals(false))与(IsEditable==false)相同(也与(!IsEditable)).除了个人喜好,.Equals()和==有什么区别吗,特别是用来比较bools? 最佳答案 这主要是一个可读性问题。我

c# - 使用 "greater than or equals"或仅使用 "greater than"

我记得从C天起我们就被鼓励使用i>-1代替i>=0因为性能。这是否仍然适用于C#.NET世界?在当今的编译器中使用其中一种对性能有何影响?即编译器是否足够聪明,可以为您优化这些?(顺便说一句,尝试在StackOverflow的问题字段中输入问题“use>=or>”,看看会发生什么。) 最佳答案 不,没有与比较运算符相关的性能问题。无论如何,任何好的编译器都会优化这种微不足道的东西。我不确定您从哪里得到使用“i>-1”而不是“i>=0”的建议。在x86体系结构上,使用哪一种都没有区别:两种情况都恰好需要两条指令......一条用于比较

c# - Lambda 表达式 : == vs. .Equals()

这是一个纯粹的学术问题,但在lambda表达式中使用==和.Equals有什么区别,哪个更好?代码示例:intcategoryId=-1;listOfCategories.FindAll(o=>o.CategoryId==categoryId);或intcategoryId=-1;listOfCategories.FindAll(o=>o.CategoryId.Equals(categoryId)); 最佳答案 对于引用类型,==旨在传达引用相等性——两个变量是否引用相同对象实例。.Equals()旨在传达值相等性——两个变量引用的

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# - 无法使用实例引用访问成员 'object.Equals(object, object)';用类型名称限定它

当我在C#中使用以下代码时...inttotalValue=0;inttotal=0;totalValue=int.Parse(Session["price"].ToString())*int.Parse(Session["day"].ToString());//ThislinecausestheerrortotalValue+=Session["IsChauffeurUsed"].ToString().Equals("Yes",StringComparer.CurrentCultureIgnoreCase)?80:0;...我收到此错误:Member'object.Equals(ob

c# - .Equals 上的 C# 泛型方法中的意外行为

为什么Equals方法返回的结果与泛型方法不同?我认为这里有一些我不明白的自动装箱。这是一个重现.net3.5或4.0行为的示例:staticvoidMain(string[]args){TimeZoneInfotzOne=TimeZoneInfo.Local;TimeZoneInfotzTwo=TimeZoneInfo.FindSystemTimeZoneById(tzOne.StandardName);Console.WriteLine(Compare(tzOne,tzTwo));Console.WriteLine(tzOne.Equals(tzTwo));}privatestat

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。正如您所