これはメソッドグループ変換であり、C#2以降で使用できます。より簡単な例として、次のことを考慮してください。
public void Foo()
{
}
...
ThreadStart x = Foo;
ThreadStart y = new ThreadStart(Foo); // Equivalent code
これは、変数をキャプチャし、を呼び出すだけのメソッドで新しいクラスを生成するラムダ式バージョンとはまったく同じではないことに注意してください。それは重要ではありませんが、違いは次の場合に重要になります。 table1
IsChildOf
Any
Where
var usingMethodGroup = selectedTables.Where(table1.IsChildOf);
var usingLambda = selectedTables.Where(x => table1.IsChildOf(x));
table1 = null;
// Fine: the *value* of `table1` was used to create the delegate
Console.WriteLine(usingMethodGroup.Count());
// Bang! The lambda expression will try to call IsChildOf on a null reference
Console.WriteLine(usingLambda.Count());