Equality method for blob

Microsoft documentation for

public bool Binary.Equals(Binary other)

      

gives no indication as to whether this tests reference equality with both objects in general and value equality as with strings.

Can anyone clarify?

Jon Skeet's answer inspired me to expand it:

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 */
  }
}

      

+2


source to share


3 answers


Well, a simple test assumes this is an equivalent value:

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
    }
}

      



The fact that they took the trouble to implement IEquatable<Binary>

and override Equals(object)

to start by suggesting value equality semantics too ... but I agree the docs should make this clear.

+6


source


This is a comparison of values ​​for a 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;

      



}

+3


source


The reflector shows that Binary.Equals is being compared on a real binary value, not a reference.

+2


source







All Articles