2013-02-15 2 views
3

Я делаю это в C#.net2.0 У меня есть список, который содержит две строки, и я хочу его отсортировать. список как List<KeyValuePair<string,string>>Список сортировки <keyValuePair <строка, строка >>

Я должен отсортировать его по первому string, что:

  • ACC
  • Абла
  • SUD
  • FLO
  • IHNJ

I t ried использовать Sort(), но это дает мне исключение: «Недопустимое исключение операции», «Не удалось сравнить два элемента в массиве».

Можете ли вы мне предложить, чтобы я мог это сделать?

ответ

8

Как вы застряли с .NET 2.0, вы должны создать класс, который реализует IComparer<KeyValuePair<string, string>> и передать его экземпляр в Sort метода:

public class KvpKeyComparer<TKey, TValue> : IComparer<KeyValuePair<TKey, TValue>> 
    where TKey : IComparable 
{ 
    public int Compare(KeyValuePair<TKey, TValue> x, 
         KeyValuePair<TKey, TValue> y) 
    { 
     if(x.Key == null) 
     { 
      if(y.Key == null) 
       return 0; 
      return -1; 
     } 

     if(y.Key == null) 
      return 1; 

     return x.Key.CompareTo(y.Key); 
    } 
} 

list.Sort(new KvpKeyComparer<string, string>()); 

Если вы используете более новую версию .NET framework, вы можете использовать LINQ:

list = list.OrderBy(x => x.Key).ToList(); 
+0

можно сказать, как сделать класс IComparer или любой учебник, где я могу легко найти, как это сделать. – sudhanshu

+0

@sudhanshu: Пожалуйста, см. Обновление моего ответа. –

2

Вы можете просто использовать Comparison<T> общий делегат. Затем вы избегаете необходимости определять класс только для реализации IComparer<T>, а просто нужно убедиться, что вы определяете свой метод в соответствии с подписью делегата.

private int CompareByKey(KeyValuePair<string, string>, KeyValuePair<string, string> y) 
{ 
    if (x.Key == null & y.Key == null) return 0; 
    if (x.Key == null) return -1; 
    if (y.Key == null) return 1; 

    return x.Key.CompareTo(y.Key); 
} 

list.Sort(CompareByKey); 
Смежные вопросы