2017-06-16 39 views
1

J'ai classe Employé et j'ai besoin d'implémenter IComparable et d'utiliser la méthode CompareTo pour trier les employés par leur nom. D'après ce que j'ai vu, je dois retourner 1, -1 et 0, mais comment utiliser les chaînes?Implémenter IComparable avec des chaînes

Voici ce que j'ai.

class Employee : IComparable<Employee> 
{ 
    string name; 
    string address; 

    public int CompareTo(Employee obj) 
    { 
     Employee person = obj; 
    } 
} 
+0

un coup d'oeil à string.Compare https://msdn.microsoft.com/en-us/library/system.string.compare(v=vs.110).aspx –

+1

double possible de [Comment mettre en œuvre IComparable interface?] (Https://stackoverflow.com/questions/4188013/how-to-implement-icomparable-interface) –

Répondre

0

simple:

 public int CompareTo(Employee obj) 
     { 
      if (name == obj.name) 
      { 
       return address.CompareTo(obj.address); 
      } 
      return name.CompareTo(obj.name); 
     } 
+0

Je n'ai pas besoin d'utiliser l'adresse – Xoax

1

La chose la plus facile à faire est de passer juste à travers une méthode de comparaison déjà mis en œuvre. Dans ce cas, puisque vous avez juste besoin de comparer deux chaînes, vous pouvez simplement appeler String.Compare:

class Employee : IComparable<Employee> 
{ 
    string name; 
    string address; 

    public int CompareTo(Employee obj) 
     => string.Compare(name, obj.name);  
} 

Vous pouvez utiliser name.CompareTo(obj.name) aussi, mais vous auriez besoin de vous inquiéter si name pourrait être nulle. Selon the MSDN article sur String.Compare:

Un ou les deux comparands peuvent être nuls. Par définition, toute chaîne, y compris la chaîne vide (""), compare plus qu'une référence nulle; et deux références nulles se comparent les unes aux autres.

+0

Does => mean change to? – Xoax

+1

C'est juste un raccourci pour une méthode à une seule commande. Le nom technique pour cela est un "membre d'expression-corps" –

+1

Cela signifie la même chose que {return ...; } –