C# ではメソッドを名前を付けずに定義できる「匿名メソッド」や「ラムダ式」を使うことができます。どちらも一時的な処理を簡潔に書くために利用されますが、記法や使い勝手に違いがあります。本記事では、ラムダ式と匿名メソッドの違いと、実際の使い分けのポイントを解説します。
匿名メソッドとは?
匿名メソッドは delegate
キーワードを使って定義する無名メソッドです。C# 2.0 で導入されました。
using System;
class Program
{
static void Main()
{
// 匿名メソッド
Action greet = delegate(string name)
{
Console.WriteLine($"Hello, {name}");
};
greet("Taro"); // 出力: Hello, Taro
}
}
delegate
キーワードを使って、メソッドをその場で定義して代入できます。
ラムダ式とは?
ラムダ式は匿名メソッドをさらに簡潔に書ける構文で、C# 3.0 から導入されました。=>
演算子を使い、より読みやすく記述できます。
using System;
class Program
{
static void Main()
{
// ラムダ式
Action<string> greet = name => Console.WriteLine($"Hello, {name}");
greet("Hanako"); // 出力: Hello, Hanako
}
}
ラムダ式は処理が1行であれば波括弧も省略でき、非常にシンプルに書けます。
匿名メソッドとラムダ式の違い
項目 | 匿名メソッド | ラムダ式 |
---|---|---|
導入バージョン | C# 2.0 | C# 3.0 |
記法 | delegate キーワードを使用 |
=> 演算子を使用 |
可読性 | やや冗長 | シンプルで見やすい |
機能的な違い |
|
|
使い分けのポイント
- ラムダ式: 簡潔に処理を書きたいとき、LINQ やイベント処理で多用される
- 匿名メソッド:
ref
やout
を使いたい場合、または読みやすさのために delegate を明示したい場合
実用例:LINQでの利用
using System;
using System.Linq;
class Program
{
static void Main()
{
int[] numbers = { 1, 2, 3, 4, 5 };
// ラムダ式
var evens = numbers.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens)); // 2, 4
}
}
LINQ ではラムダ式が主流です。短く直感的に記述できるため、可読性が高くなります。
まとめ
匿名メソッドとラムダ式はどちらも「名前を付けないメソッド」を定義する仕組みですが、現在の C# では ラムダ式が主流 です。匿名メソッドは特別な理由(ref/out
の利用など)がある場合に限って使うケースが多いです。基本的にはラムダ式を使うことで、モダンで読みやすいコードが書けます。