Tag: 等于

确定Equals()是否为覆盖?

我有一个Type(type)的实例。 如何确定它是否覆盖Equals()?

在null之前转换为对象检查覆盖等于

在这里阅读关于覆盖相等运算符的msdn文章 以下片段让我感到困惑…… // If parameter cannot be cast to Point return false. TwoDPoint p = obj as TwoDPoint; if ((System.Object)p == null) // <– wtf? { return false; } 为什么在这里有一个转换为Object来执行null比较?

c#NaN比较Equals()和==之间的差异

看一下这个 : var a = Double.NaN; Console.WriteLine(a == a); Console.ReadKey(); 打印“假” var a = Double.NaN; Console.WriteLine(a.Equals(a)); Console.ReadKey(); 打印“真实”! 为什么打印“真实”? 由于浮点数规范,NaN的值不等于它自己! 所以似乎Equals()方法实现错误……我错过了什么?

两个相同的.NET对象并不是说它们

我有以下代码: object val1 = 1; object val2 = 1; bool result1 = (val1 == val2);//Equals false bool result2 = val1.Equals(val2); //Equals true 那是怎么回事? 修复此问题的唯一方法是使用.Equals()方法吗?

定义operator ==但不定义Equals()或GetHashCode()有什么问题?

对于下面的代码 public struct Person { public int ID; public static bool operator ==(Person a, Person b) { return a.Equals(b); } public static bool operator !=(Person a, Person b) { return !a.Equals(b); } } 为什么编译器会给我这些警告? 没有定义下面的方法有什么问题? warning CS0660: ‘Person’ defines operator == or operator != but does not override Object.Equals(object o) warning CS0661: ‘Person’ defines operator […]

在C#中简化覆盖等于(),GetHashCode()以获得更好的可维护性

我经常发现我的自我重写Equals()和GetHashCode()来实现具有相同属性值的业务对象相等的语义。 这会导致代码重复写入并且易于维护(属性被添加,并且一个/两个覆盖都不会更新)。 代码最终看起来像这样(欢迎对实现的评论): public override bool Equals(object obj) { if (object.ReferenceEquals(this, obj)) return true; MyDerived other = obj as MyDerived; if (other == null) return false; bool baseEquals = base.Equals((MyBase)other); return (baseEquals && this.MyIntProp == other.MyIntProp && this.MyStringProp == other.MyStringProp && this.MyCollectionProp.IsEquivalentTo(other.MyCollectionProp) && // See http://stackoverflow.com/a/9658866/141172 this.MyContainedClass.Equals(other.MyContainedClass)); } public override int GetHashCode() { int hashOfMyCollectionProp […]

InternalEquals的实现在哪里(object objA,object objB)

在使用Reflector反汇编.Net源代码的同时,我在Object Class中实现了Equals实现,它引用了 bool InternalEquals(object objA, object objB); 这也是指 internal static extern bool InternalEquals(object objA, object objB); 我现在很困惑在哪里找到这个InternalEquals(object objA, object objB)函数的实现,以及它是如何使用这个函数的,其中.Net程序集是这个函数定义的,如果每个和所有内容都是从头开始编写的.Net源代码,那么为什么我找不到这个函数的实现。

C#中==运算符和Equals()方法的区别?

==和Equals()之间的区别是什么? 我知道==用于比较运算符和Equals()方法用于比较string的内容。所以我试过 // first example string s1 = “a”; string s2 = “a”; Console.Write(a.Equals(s2)); // returns true, but if I assign “b” to s2, // then result will be false // second example string s1 =”a”; string s2 =”a”; Console.Write(s1 == s2); // returns true 怎么会这样? 两者都是不同的对象引用。 假设我们认为这些是参考。 但我试着这样使用 string s1 = new string(“ab”); string […]

ReferenceEquals工作错误的字符串

为什么在这种情况下,对象的ReferenceEquals方法表现不同? string a= “fg”; string b= “fg”; Console.WriteLine(object.ReferenceEquals(a, b)); 所以在这种情况下,它得到的结果是true 。 如果它比较我的字符串的值而不是引用。 但是当我写下这样的话: StringBuilder c = new StringBuilder(“fg”); string d = c.ToString(); Console.WriteLine(object.ReferenceEquals(a, d)); 在这种情况下,它工作正常,结果是false ,因为它比较了我的对象的引用。

String.Equals()无法正常工作

我正在使用LINQ搜索我的一个Entity Framework表,并根据名称找到一个“组”。 名称是一个字符串,看起来是Unicode(说它在edmx中)。 我有一个方法GetGroup() ,我传入一个名称来搜索。 通过代码调试,我已经在我的数据库中有一个名为“Test”的组。 一旦我传入一个名为“TEST”的组,我希望它返回已经在数据库中的“Test”。 它出于某种原因,没有找到“测试”并认为“测试”不存在。 这是我的查询,我不明白为什么它不起作用。 请帮忙。 “name”是组名中传递的。 我的.Equals似乎只有在gr.Name和name完全相同时才有效。 如果一个字符在两个字符串之一中是大写字母,则.Equals不起作用。 我曾尝试使用InvariantCultureIgnoreCase ,这似乎没有帮助。 如果有人问, MyLeagueId和LeagueId将始终匹配,则设置数据库,以便可以有一个不同联盟ID的组。 我不认为这是问题所在。 Group g = (from gr in this.DatabaseConnection.Groups where gr.Name.Equals(name, StringComparison.OrdinalIgnoreCase) && gr.LeagueId == this.MyLeagueId select gr).FirstOrDefault();