2010-02-11 3 views
0

제네릭 클래스 내에서 중첩 된 내부 클래스를 만드는 중이며 제대로 작성하고 있는지 확신 할 수 없습니다. 여기서 눈부신 무엇인가 잘못 있습니까?일반 클래스 내에서 중첩 된 내부 클래스 비교

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

가 작동되거나 문제가 당신이 될 수 있을까?? 특정? –

+0

그것은 작동하지만 내부 compareTo에 캐스트를 만드는 것보다 더 좋은 방법이 있는지 궁금합니다. –

답변

2

은 첫째, 당신이 중복 필요하지 않은 경우, SortedList<T> 도움이 될 수 있습니다 :

여기에 코드입니다. 당신의 비교 Bar 작업을 할 필요가 있으므로 List<Bar>

Bar 인스턴스를 비교하려는 것입니다 (가장 쉽게 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); 
    } 
}