2012-09-26 2 views
1

나는 WP7에서 SortedDictionary를 사용할 수 없다는 것을 알고 있습니다 ... 그래서 직접 정렬해야합니다.WP7 SortedDictionary

나는 예제의 번호를 발견하고 현재이 코드

Dictionary<string, TimetableClass> AllClasses = new Dictionary<string, TimetableClass>() 
     { 
      { "Maths", new TimetableClass {ClassName="Maths", Location="RM1"}}, 
      { "Physics", new TimetableClass {ClassName="Physics", Location="PM1"}}, 
      { "English", new TimetableClass {ClassName="English", Location="PM1"}}, 
      { "Algebra", new TimetableClass {ClassName="Algebra", Location="A1"}} 

     }; 

     var sortedDict = new Dictionary<string, TimetableClass>(); 

     foreach (KeyValuePair<string, TimetableClass> singleclass in AllClasses.OrderBy(key => key.Value)) 
     { 
      sortedDict.Add(singleclass.Key, singleclass.Value); 
     } 

을 사용하고 있습니다하지만이 프로그램을 실행할 때 나는 foreach 문에 예외가?

예외는 처리되지 않은 인수 예외입니다 - 정말 내가 잘못 여기에 무슨 짓을 아무 생각

"값이 예상 범위 내에서 봇 가을을한다." 도움을 주시면 감사하겠습니다.

  • 감사
+0

코드가 적합하지 않습니다. 주문을 잃어 버린 새 사전에 값을 추가하면 사전을 정렬 할 수 없습니다. 대신에 List >에 값을 추가하고 싶을 것입니다. –

답변

1

당신은 객체 (값)을 기준으로 정렬 할 경우는,

foreach (KeyValuePair<string, TimetableClass> singleclass in AllClasses.OrderBy(item => item.Key)) 
     { 
      sortedDict.Add(singleclass.Key, singleclass.Value); 
     } 

다른 방법으로 작동합니다, 당신은 마지막으로이

foreach (KeyValuePair<string, TimetableClass> singleclass in AllClasses.OrderBy(item => item.Value.ClassName)) 
     { 
      sortedDict.Add(singleclass.Key, singleclass.Value); 
     } 

을 시도하고 foreach 루프 대신에 이것을 사용할 수도 있고 'sortedDict'사전을 추가 할 필요도 없습니다.

AllClasses = AllClasses.OrderBy(item => item.Key).ToDictionary(item => item.Key, item => item.Value); 
+0

네, 괜찮습니다 - 고마워요! 그냥 차이를 보면서, 나는 당신의 코드에 따라 키가 아닌 객체 (Value)로 주문하려한다는 것을 알았다. 아마도 객체가 '주문할 수 없으므로'이것이 문제 였을 것입니다. – Peter

+0

예! 또는 Object (Value)를 기준으로 정렬하려면이 AllClasses.OrderBy (item => item.Value.ClassName) '을 시도하십시오. – nkchandra

+0

업데이트 된 답변 확인 :) – nkchandra