二元对象上的等于方法

时间:2009-09-23 05:09:53

标签: c# .net

的Microsoft文档
public bool Binary.Equals(Binary other)

没有说明这是否与一般的对象或与字符串一样的值相等来测试引用的相等性。

任何人都可以澄清吗?

John Skeet的回答激励我将其扩展到:

using System;
using System.Data.Linq;
public class Program
{
  static void Main(string[] args)
  {
    Binary a = new Binary(new byte[] { 1, 2, 3 });
    Binary b = new Binary(new byte[] { 1, 2, 3 });
    Console.WriteLine("a.Equals(b) >>> {0}", a.Equals(b));
    Console.WriteLine("a {0} == b {1} >>> {2}", a, b, a == b);
    b = new Binary(new byte[] { 1, 2, 3, 4 });
    Console.WriteLine("a {0} == b {1} >>> {2}",a,b, a == b);
    /* a < b is not supported */
  }
}

3 个答案:

答案 0 :(得分:6)

嗯,一个简单的测试表明值相等:

using System;
using System.Data.Linq;

class Program {

    static void Main(string[] args)
    {
        Binary a = new Binary(new byte[] { 1, 2, 3 });
        Binary b = new Binary(new byte[] { 1, 2, 3 });

        Console.WriteLine(a.Equals(b)); // Prints True
    }
}

他们已经费心实施IEquatable<Binary>并覆盖Equals(object)开头的事实也暗示价值平等语义......但我同意文档应该制作这很清楚。

答案 1 :(得分:3)

这是每个Reflector的值比较......

private bool EqualsTo(Binary binary)
{
if (this != binary)
{
    if (binary == null)
    {
        return false;
    }
    if (this.bytes.Length != binary.bytes.Length)
    {
        return false;
    }
    if (this.hashCode != binary.hashCode)
    {
        return false;
    }
    int index = 0;
    int length = this.bytes.Length;
    while (index < length)
    {
        if (this.bytes[index] != binary.bytes[index])
        {
            return false;
        }
        index++;
    }
}
return true;

}

答案 2 :(得分:2)

Reflector显示Binary.Equals按实际二进制值进行比较,而不是通过引用进行比较。