2012-11-16 5 views
0

내 코드에 SortedList이 있습니다. 나는 그 안에 키 값 쌍을 채 웁니다. SortedList에 항목을 추가하면 키에 의해 자동으로 정렬됩니다. 그러나 나는 그것을 가치로 분류 할 필요가있다. 값은 콤보 상자의 보이는 텍스트이기 때문입니다. 알파벳순으로 정렬해야합니다. 클래스를 작성하고 SortedList 클래스에서 상속 받고 Add 메서드를 재정의하기로 결정했습니다.SortedList를 재정의하는 방법 값으로 정렬하는 방법 추가

그러나 Microsoft's SortedList class 코드를 살펴본 결과 Insert 메서드가 있고 정렬이 이루어지며 불행히도이 코드는 개인이므로 재정의 할 수 없습니다. 이 일에 대해 나를 도와 줄 수 있니?

참고 : ArrayList 또는 Dictionary 또는 다른 것을 사용할 수 없습니다. 나는 우리 프로젝트에서 모든 코드를 관리 할 수 ​​없다. 나는 SortedList '또는 SortedList에서 파생 된 을 반환해야합니다.

+0

당신이 무엇에 어떤 요구 사항이 있습니까 트릭을해야 반사를 사용하여 개인 삽입을 호출 열쇠가 있어야합니까? 그렇지 않다면 텍스트를 키와 값으로 추가하지 않는 것이 어떻습니까? 'sortedList.Add (텍스트, 텍스트) ' – Douglas

+0

예 첫 번째 매개 변수는 key 여야하고 두 번째 매개 변수는 value 여야합니다. 우리 프로젝트의 다른 클래스에 따라 달라질 수 있습니다 –

+0

[C# 개체 별 값순 정렬 목록] (http://stackoverflow.com/questions/16649481/c-sharp-sorted-list-by-value-with-object) – nawfal

답변

2

첫 번째 제안은 사용자 지정 비교자를 사용하는 것이지만 문제를 해결하지 못했습니다. 그래서 저는 더 자세한 SortedList implementaion을 조사하고 다음과 같은 제안에 내 원래의 게시물을 교체 :

는 Add 메서드를 재정의하고

private MySortedList() 
{ 
} 

public override void Add(object key, object value) 
{ 
    if (key == null || value == null) 
    { 
     //throw new ArgumentNullException("key", Environment.GetResourceString("ArgumentNull_Key")); 
     throw new ArgumentNullException(); // build your own exception, Environment.GetResourceString is not accessible here 
    } 

    var valuesArray = new object[Values.Count]; 
    Values.CopyTo(valuesArray , 0); 

    int index = Array.BinarySearch(valuesArray, 0, valuesArray.Length, value, _comparer); 
    if (index >= 0) 
    { 
     //throw new ArgumentException(Environment.GetResourceString("Argument_AddingDuplicate__", new object[] { this.GetKey(index), key })); 
     throw new ArgumentNullException(); // build your own exception, Environment.GetResourceString is not accessible here 
    } 

    MethodInfo m = typeof(SortedList).GetMethod("Insert", BindingFlags.NonPublic | BindingFlags.Instance); 
    m.Invoke(this, new object[] {~index, key, value}); 
} 
+0

내 비교자를 작성하기위한 예제 코드가 있습니까? –

+0

우리는 클래식 SortedList에 대해 이야기하고 있습니다. generic SortedList , 맞습니까? –

+0

불행히도, 나는 이것이 효과가 있다고 생각하지 않습니다. 커스텀 비교 자만이 값이 아닌'SortedList'에서 키를 볼 수 있습니다. – Douglas

관련 문제