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);

の簡易表現です。

リンク