C#でクロージャの続き

いくつか実験してみた。
引数を取らないケース。これはOK

List<string> ls1 = new List<string>();
List<string> ls2 = ls1.FindAll(delegate
{
    return true;
});

引数に文字列を取るケース。これもOK

List ls1 = new List();
List ls2 = ls1.FindAll(delegate(string text)
{
    return true;
});

引数にintを取るケース。これは「'匿名メソッド' から 'System.Delegate' に変換できません。」と怒られる。

List<string> ls1 = new List<string>();
List<string> ls2 = ls1.FindAll(delegate(int i)
{
    return true;
});

List::FindAllもT型を1つ引数に取るシグネチャでないと匿名メソッドがコンパイル出来ないらしい。
Delagate型じゃなくて、特定のdelgateを仮引数に指定しないと、匿名メソッドを実引数に取れないようだ。