2010-02-11 75 views
0

Je crée une classe interne imbriquée dans une classe générique et je ne suis pas sûr si j'écris correctement. Est-ce qu'il y a quelque chose qui cloche ici?Comparaison de classes internes imbriquées dans la classe générique

Voici le code:

public class Foo<T> where T : IComparable<T> 
{ 
    protected class Bar : IComparable 
    { 
     private KeyValuePair<T, string> _keyval; 

     public Bar(KeyValuePair<T, string> kv) 
     { 
      _keyval = kv; 
     } 

     public int CompareTo(object obj) 
     { 
      T comparing = (T)obj; 
      return _keyval.Key.CompareTo(comparing.key); 
     } 
    } 

    private List<Bar> _bars; 

    public Foo() 
    { 
     _bars = new List<Bar>(); 
    } 

    public void AddKeyValInOrder(KeyValuePair<T, string> kv) 
    { 
     Bar toAdd = new Bar(kv); 

     int positionToAddAt = _bars.BinarySearch(toAdd); 
     if (positionToAddAt < 0) 
      positionToAddAt = positionToAddAt^-1; 

     _bars.Insert(positionToAddAt, toAdd); 
    } 
} 
+0

Est-il travailler ou est-il un problème Pouvez-vous être? –

+0

Cela fonctionne, mais je me demande s'il existe une meilleure méthode que d'avoir à faire un cast dans le CompareTo interne. –

Répondre

2

Tout d'abord, notez que si vous n'avez pas besoin de doublons, SortedList<T> peut être utile.

Le List<Bar> va vouloir comparer Bar cas, de sorte que votre comparaison doit travailler sur Bar (plus faciles à appliquer en mettant en œuvre IComparable<Bar>:

protected class Bar : IComparable, IComparable<Bar> 
{ 
    private KeyValuePair<T, string> _keyval; 

    public Bar(KeyValuePair<T, string> kv) 
    { 
     _keyval = kv; 
    } 
    public int CompareTo(Bar other) 
    { 
     return _keyval.Key.CompareTo(other._keyval.Key); 
    } 
    int IComparable.CompareTo(object obj) 
    { 
     return CompareTo(obj as Bar); 
    } 
}