Tag: 相等

== vs C等于#

在C#中评估==和Equals有什么区别? 对于Ex, if(x==x++)//Always returns true 但 if(x.Equals(x++))//Always returns false 编辑: int x=0; int y=0; if(x.Equals(y++))// Returns True

比较两个数组是否相同的最快方法是什么?

我有两个对象数组,它们可能具有相同的值,但顺序不同,例如 { “cat”, “dog”, “mouse”, “pangolin” } { “dog”, “pangolin”, “cat”, “mouse” } 我希望将这两个数组视为相等。 测试这个的最快方法是什么?

为什么String.Equals返回false?

我有以下C#代码(来自我正在使用的库)试图找到比较指纹的证书。 请注意,在以下代码中, mycert.Thumbprint和certificateThumbprint都是字符串。 var certificateThumbprint = AppSettings.CertificateThumbprint; var cert = myStore.Certificates.OfType().FirstOrDefault( mycert => mycert.Thumbprint != null && mycert.Thumbprint.Equals(certificateThumbprint) ); 这无法找到带有指纹的证书,因为即使字符串相等, mycert.Thumbprint.Equals(certificateThumbprint)也为false 。 mycert.Thumbprint == certificateThumbprint也返回false ,而mycert.Thumbprint.CompareTo(certificateThumbprint)返回0。 我可能会遗漏一些明显的东西,但我无法弄清楚为什么Equals方法失败了。 想法?

C#等式检查

您为自己创建的structs和classes编写相等性检查的方法是什么? 1) “完整”等式检查是否需要大量样板代码(如override Equals , override GetHashCode ,genericsEquals , operator== , operator!= )? 2)您是否明确指定您的类为IEquatable接口建模? 3)我是否理解正确,没有实际的方法来自动应用Equals覆盖,当我调用类似a == b东西时,我总是要实现Equals和operator==成员?

我可以在接口上重载==运算符吗?

我有这样的界面: public interface IFoo { int A {get;} int B {get;} } 我有多个实现IFoo的类。 我想检查相等性,而不是基于ReferenceEquality,但是如果A和B都相同,那么两个IFoos应该被认为是相同的(实际上我正在检查通过WCF发送的Key-Value对的集合,这就是为什么我可以没有ReferenceEquality)。 现在,如果我有: IFoo first = new FooBar1() { A = 1, B = 1}; IFoo second = new FooBar2() { A = 1, B = 1}; if (first == second) { //this should return true } 目前IFoo是IEquatable ,因此FooBar1和FooBar2重写Equals(IFoo other) ,但这不是在==上调用的内容。 我正在搜索我的代码,用a.Equals(b)替换a==b ,但这并不好。 […]

在C#中,为什么数组上的Equals()方法只比较它们的引用,而不是它们的实际内容

在C# ,为什么Equals()方法总是通过比较引用而不是通过比较内容来检查两个arrays之间的相等性? 因此,所有在其实现中调用Equals()方法(很多)都不能像数组那样工作(它不会比较内容): 示例: int[] array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9}; int[] array2 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9}; var u = array1.Equals(array1); //true var v = array1.Equals(array2); //false var w = Array.Equals(array1, array2); //false var x = (new List(new int[][] { array1 })).Contains(array2); […]

在C#中使用IEqualityComparer 接口和EqualityComparer 类

我正在编写一个循环链表,使用这篇文章作为帮助。 在一个函数中,在此列表中搜索具有给定值的节点 public Node Find(T item) { Node node = FindNode(head, item); return node; } Node FindNode(Node node, T valueToCompare) { Node result = null; if (comparer.Equals(node.Value, valueToCompare)) result = node; else if (result == null && node.Next != head) result = FindNode(node.Next, valueToCompare); return result; } 作者使用IEqualityComparer comparer对象,该对象在其中一个构造函数中使用属性EqualityComparer.Default进行初始化。 你能解释一下在这里使用这些接口( IEqualityComparer )和类( EqualityComparer )的想法吗? 我读过MSDN,但我不理解工作和使用它们的原理。

两个不同的“字符串”是同一个对象实例?

代码非常自我解释。 我期望当我创建a1和b1 ,我创建了两个包含相同文本的不同字符串实例。 所以我认为a1 == b1是真的但是object.ReferenceEquals(a1,b1)会是假的,但事实并非如此。 为什么? //make two seemingly different string instances string a1 = “test”; string b1 = “test”; Console.WriteLine(object.ReferenceEquals(a1, b1)); // prints True. why? //explicitly “recreating” b2 string a2 = “test”; string b2 = “tes”; b2 += “t”; Console.WriteLine(object.ReferenceEquals(a2, b2)); // prints False //explicitly using new string constructor string a3 = new […]