Comparison<T> デリゲートの使い方
List<T> クラスの Sort メソッドは引数に Comparison<T> デリゲートを取ります。
Comparison<T> デリゲートの定義は次のようになっています。
public delegate int Comparison<in T>(T x, T y)
Comparison<T> デリゲートのインスタンスを作成し、List.Sort メソッドを呼び出すサンプルコードです。
using System; using System.Collections.Generic; using System.Linq; class C { public int Compare(int a, int b) { return a - b; } } class Program { static int Compare(int a, int b) { return a - b; } static void Main() { var xs = new List<int>() { 4, 3, 2, 7 }; // 静的メソッドを渡す xs.Sort(Compare); // インスタンスメソッドを渡す xs.Sort(new C().Compare); // 無名関数を渡す xs.Sort((a, b) => a - b); // Comparison<int> デリゲートを作成する Comparison<int> c = (a, b) => a - b; xs.Sort(c); // new キーワードで明示的に Comparison<int> デリゲートの // インスタンスを作成する Func<int, int, int> fn = (a, b) => a - b; xs.Sort(new Comparison<int>(fn)); } }
デリゲートインスタンスを作るときの
Comparison<int> c = Compare;
は、
Comparison<int> c = new Comparison<int>(Compare);
の簡易表現です。