List<T>.Sort()
方法有 3 个重载。
其中之一如下
System.Collections.Generic.List<T>.Sort(System.Comparison<T>)
看到Comparison<T>
,我认为它应该是一个派生自 Comparison<T>
的类类(class)。 (参数的通常解释)
但是下面的效果非常好,据说使用了上面的重载。
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());
}
我确实将委托(delegate)交给了静态方法来代替 Comparison<T>
。
它是如何工作的?
最佳答案
System.Comparison<T>
定义如下:
public delegate int Comparison<in T>(T x, T y);
这意味着它是 delegate ,不是一个类。接受委托(delegate)作为参数的方法实际上接受的是方法,而不是 Comparison 类的实例。
此代码可以使用 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());
}
}
关于.net - System.Comparison<T> 理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3498891/