2013-02-15 258 views
3

我在做C#.net2.0 我有一個包含兩個字符串的列表,我想對它進行排序。 名單就像是List<KeyValuePair<string,string>>排序列表<keyValuePair <字符串,字符串>>

我有根據第一string對它進行排序,這就是:

  • ACC
  • ABLA
  • SUD
  • FLO
  • IHNJ

餘噸裏德使用Sort(),但它給我的例外:「無效操作異常」,「無法比較數組兩個元素」

您能否提供我了,反正在我能做到這一點?

回答

8

當你被卡住.NET 2.0中,你必須創建一個實現​​3210一類,並通過它的一個實例給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框架,您可以使用LINQ:

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

你能告訴我如何做一個IComparer或任何教程,我可以很容易地找到如何做到這一點。 – sudhanshu 2013-02-15 12:54:44

+0

@sudhanshu:請參閱更新我的答案。 – 2013-02-15 12:59:39

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); 
相關問題