Tag: 相等

C#字符串相等运算符返回false,但我很确定它应该是真的……什么?

我正在尝试为生成大量文本的代码编写unit testing。 我遇到了一个问题,其中“预期”和“实际”字符串似乎相等,但Assert.AreEqual抛出,并且相等运算符和Equals()返回false。 GetHashCode()的结果对于两个值也是不同的。 但是,将两个字符串放入文本文件并与DiffMerge比较告诉我它们是相同的。 另外,对两个值使用Encoding.ASCII.GetBytes()然后使用SequenceEquals来比较结果字节数组返回true。 这些值每个都是34KB,所以我暂时把它们放在这里。 有任何想法吗? 我完全难过了。

实现地理坐标类:相等比较

我正在将CodePlex的地理坐标类集成到我的个人“工具箱”库中。 此类使用float字段来存储纬度和经度。 由于GeoCoordinate类实现了IEquatable ,我习惯性地编写Equals方法,如下所示: public bool Equals(GeoCoordinate other) { if (other == null) { return false; } return this.latitude == other.latitude && this.longitude == other.longitude; } 在这一点上,我停下来,并认为我正在比较浮点变量的相等性,这通常是禁忌。 我的思考过程大致如下: 我只能设想一次设置Latitude和Longitude属性,这意味着不会累积任何错误来搞砸我的比较。 另一方面,写(尽管没有意义)是可能的 var geo1 = new GeoCoordinate(1.2, 1.2); var geo2 = new GeoCoordinate(1.2, 1.2); // geo1.Equals(geo2) will definitely be true, BUT: geo2.Latitude *= 10; geo2.Latitude /= 10; […]

在C#中Object == Object是否安全?

在Java中,以下代码可以返回false: IntegerPlus o1 = new IntegerPlus(1000); IntegerPlus o2 = o1; boolean b1 = o1 == o2; boolean b2 = o1.Equals (o2); 这也是C#中的一个问题吗? 或者C#是否以某种方式执行==即使对象被移动也总是如此? ( 我在这里更详细地描述了Java问题。 )

实现IEqualityComparer 以比较任何类的任意属性(包括匿名)

我正在编写实现IEqualityComparer的这个整洁的类,因此我可以将任何匿名类型传递给它(或实际上任何具有属性的类型),它将通过比较类型的属性值自动比较类型。 public class CompareProperty : IEqualityComparer { private Type type; private PropertyInfo propInfo; private string _fieldName; public string fieldName { get; set; } public CompareProperty(string fieldName) { this.fieldName = fieldName; } public bool Equals(T x, T y) { if (this.type == null) { type = x.GetType(); propInfo = type.GetProperty(fieldName); } object objX = propInfo.GetValue(x, null); […]

什么时候==会以不同的方式覆盖.equals?

我理解==和.equals之间的区别。 这里还有很多其他问题可以解释细节上的差异,例如这一个: .Equals和==这一点之间的区别是什么 :其他许多人之间的比特 平等 。 我的问题是:为什么他们两个(我意识到必须有一个非常好的理由) – 他们似乎都做同样的事情(除非被覆盖不同)。 什么时候==会以不同的方式重载.equals被覆盖的方式?

我们如何检查实现相等运算符的类型的引用相等性?

在C#中,我们如何检查实现相等运算符的类型的引用相等性? class C { public int Val{get;set;} public static bool operator ==(C c1, C c2) { return c1.Val == c2.Val; } public static bool operator !=(C c1, C c2) { return c1.Val != c2.Val; } } class Program { public static void Main(string[] args) { C c1=new C(){Val=1}; C c2=new C(){Val=1}; Console.WriteLine(c1==c2);//True. but they are […]

字符串等式运算符==在c#中

我试图在C#中查看为字符串类中的比较运算符实现的代码。 发现是这样的: //THIS IS NOT WHAT I MEANT public static bool Equals(object objA, object objB) { return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB))); } //THIS IS WHAT I SEE REALLY and the above is what I would expect to see public static bool Equals(string a, string b) { […]

在linq中设置相等

我有两个列表A和B(列表)。 如何以最便宜的方式确定它们是否相等? 我可以写一些类似’(A减B)联合(B减A)=空集’或将它们连接在一起并计算元素数量,但它相当昂贵。 有解决方法吗?

元组==混乱

假设我定义了两个元组: Tuple tuple1 = new Tuple(1.0f, 2.0f, 3.0f, 4.0f); Tuple tuple2 = new Tuple(1.0f, 2.0f, 3.0f, 4.0f); 如果我尝试比较元组,我会得到不同的结果 bool result1 = (tuple1 == tuple2); // FALSE bool result2 = tuple1.Equals(tuple2); // TRUE 我希望两个调用都能返回true。 究竟是什么==比较?

“(float)integer == integer”在C#中是否保证相等?

虽然“我们都知道” x == y可能有问题,但x和y是浮点值,这个问题更具体一些: int x = random.Next(SOME_UPPER_LIMIT); float r = x; // Is the following ALWAYS true? r == x 现在,因为float的范围远大于整数的范围(但是精度不足以在边缘处唯一地呈现整数),如果对这个问题的回答也解决了上述x的哪个值可以得到保证将会很好因为,如果它可以得到保证。 目前我的代码正在做出这个假设(对于相对较小的x值) – 我想确保我不会被咬掉:) 这将失败,“不等于:16777217”(cast float – > int): for (int i = 0; i < int.MaxValue; i++) { float f = i; if ((int)f != i) throw new Exception("not equal " + i); […]