Comparing two instances of a class

后端 未结 8 757
礼貌的吻别
礼貌的吻别 2020-12-03 17:33

I have a class like this

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

   public List Members = ne         


        
8条回答
  •  南方客
    南方客 (楼主)
    2020-12-03 18:18

    You should implement the IEquatable 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
    {
       public string Name {get;set;}
       public string type {get;set;}
    
       public List Members = new List();
    
       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
           // Check out the specific implementations (StringComparer.CurrentCulture, e.a.).
           if( EqualityComparer.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;
    
       }
    
    }
    

提交回复
热议问题