無名関数
C#には大きく分けて2種類の無名関数(匿名関数)の記法が存在する。一つは、C# 2.0で導入された匿名メソッド (anonymous method) である。もう一つは、C# 3.0で導入されたラムダ式である。通例、ラムダ式のほうが簡潔であり、またラムダ式は式木として扱うこともできるため、基本的にC# 3.0以降ではラムダ式を用いる。
C#のラムダ式と匿名メソッドを比較した場合に唯一匿名メソッドが勝っている点は、パラメーターリストを省略できることである。
なお、ラムダ式や匿名メソッドがデリゲートパラメータとして渡される場合、内部的にはコンパイラによって自動的に命名された(C#開発環境では通常命名できない名前の)クラスが生成され、ラムダ式・メソッドはそのメンバーメソッドとして自動的に命名された後、コンパイルが実行される。つまり、IL化された時点で定義済みの名前付きメソッドのデリゲートを生成して渡す操作へと置換されるため、コンパイル後は通常の(名前付きメソッドの)デリゲート呼び出しと挙動的にはほぼ変わらない扱いとなる。
例えば(実用的ではないものの)リフレクションを介して無名関数の「名前」を見つけ出せば、再度呼び出すことも可能である。