代码之家  ›  专栏  ›  技术社区  ›  SaravananArumugam

System.Comparison<T> 理解

  •  6
  • SaravananArumugam  · 技术社区  · 14 年前

    List<T>.Sort()

    其中之一是

    System.Collections.Generic.List<T>.Sort(System.Comparison<T>)
    

    Comparison<T> ,我认为它应该是一个派生自

    但是下面的工作非常好,据说是在使用上面的重载。

            public static void Main(string[] args)
            {
                List<Int32> collection = new List<Int32>();
    
                collection.Add(20);
                collection.Add(270);
                collection.Add(30);
                collection.Add(90);
                collection.Add(40);
                collection.Add(18);
                collection.Add(100);
    
                collection.Sort(MyComparer.CompareWithCase);
    
                foreach (Int32 s in collection)
                    Console.WriteLine(s);
            }
    
            public static int CompareWithCase(int i1, int i2)
            {
                return i1.ToString().CompareTo(i2.ToString());
            }
    

    比较<T> 它是如何工作的?

    2 回复  |  直到 14 年前
        1
  •  11
  •   knocte    9 年前

    System.Comparison<T> 定义如下:

    public delegate int Comparison<in T>(T x, T y);
    

    这意味着它是 delegate

    此代码可以用lambda表达式重写如下:

    collection.Sort((i1, i2) => i1.ToString().CompareTo(i2.ToString()));
    

    下面的代码片段可以更好地解释发生了什么:

    public static class TestClass {
    
      public static void Main(string[] args){
          Comparison<Int32> comparisonDelegate = CompareWithCase;
          //We now can use comparisonDelegate as though it is a method;
          int result = comparisonDelegate(1,2);
      }
    
      public static int CompareWithCase(int i1, int i2)
      {
         return i1.ToString().CompareTo(i2.ToString());
      } 
    }
    
        2
  •  1
  •   Ani    14 年前

    System.Comparison<T> 代表。

    public delegate int Comparison<in T>(
        T x,
        T y
    )
    

    CompareWithCase 方法使它完全可分配给 Comparison<int> .

    请注意,如果没有类型推断,您的 Sort

     collection.Sort(new Comparison<int>(MyComparer.CompareWithCase));
    

    List<T>.Sort 期待 IComparer<T>