Search code examples
c#classobjectinstance

Comparing two instances of a class


I have a class like this

public class TestData
{
   public string Name {get;set;}
   public string type {get;set;}

   public List<string> Members = new List<string>();

   public void AddMembers(string[] members)
   {
      Members.AddRange(members);
   }   
}

I want to know if it is possible to directly compare to instances of this class to eachother and find out they are exactly the same? what is the mechanism? I am looking gor something like if(testData1 == testData2) //Do Something And if not, how to do so?


Solution

  • You should implement the IEquatable<T> interface on your class, which will allow you to define your equality-logic. Actually, you should override the Equals method as well.

    public class TestData : IEquatable<TestData>
    {
       public string Name {get;set;}
       public string type {get;set;}
    
       public List<string> Members = new List<string>();
    
       public void AddMembers(string[] members)
       {
          Members.AddRange(members);
       }   
    
      // Overriding Equals member method, which will call the IEquatable implementation
      // if appropriate.
    
       public override bool Equals( Object obj )
       {
           var other = obj as TestData;
           if( other == null ) return false;
    
           return Equals (other);             
       }
    
       public override int GetHashCode()
       {
          // Provide own implementation
       }
    
    
       // This is the method that must be implemented to conform to the 
       // IEquatable contract
    
       public bool Equals( TestData other )
       {
           if( other == null )
           {
                return false;
           }
    
           if( ReferenceEquals (this, other) )
           {
                return true;
           }
    
           // You can also use a specific StringComparer instead of EqualityComparer<string>
           // Check out the specific implementations (StringComparer.CurrentCulture, e.a.).
           if( EqualityComparer<string>.Default.Compare (Name, other.Name) == false )
           {
               return false;
           }
           ...
    
           // To compare the members array, you could perhaps use the 
           // [SequenceEquals][2] method.  But, be aware that [] {"a", "b"} will not
           // be considerd equal as [] {"b", "a"}
    
           return true;
    
       }
    
    }