C#のラムダ式をメソッド引数に渡す方法をやさしく解説!高階関数の基本がわかる
生徒
「C#のラムダ式って、その場で使うものだと思っていたんですが、メソッドに渡すこともできるんですか?」
先生
「できますよ。ラムダ式は“処理そのもの”を値として扱えるので、メソッドの引数として渡せます。」
生徒
「処理を引数にするって、ちょっとイメージが難しいです……」
先生
「では、身近なたとえを使いながら、C#の高階関数の考え方を一緒に見ていきましょう。」
1. ラムダ式を引数に渡すとはどういうこと?
C#のラムダ式とは、「その場で定義できる簡単なメソッド」のようなものです。 これまでの解説では、ラムダ式を変数に代入したり、その場で実行したりしてきました。 しかしC#では、ラムダ式をメソッドの引数として渡すことができます。
引数とは、メソッドに渡す情報のことです。数字や文字列を渡すのと同じように、 「何をするか」という処理自体を渡せるのが、ラムダ式の大きな特徴です。 このような考え方を高階関数と呼びます。
高階関数とは、「関数(C#ではメソッドやラムダ式)を受け取ったり、返したりできる仕組み」のことです。 難しく聞こえますが、実際はとても便利で、C#のプログラミングではよく使われています。
2. 身近なたとえで考える高階関数
ここで、料理をたとえに考えてみましょう。 「野菜を調理する」というメソッドがあったとします。 その中で、「切る」「焼く」「ゆでる」などの調理方法を変えたい場合、 毎回別のメソッドを書くのは大変です。
そこで、「調理方法」を引数として渡せるようにします。 これが、ラムダ式をメソッド引数に渡すイメージです。 C#では、処理をデータのように扱えるため、こうした柔軟な設計が可能になります。
プログラミング未経験の方でも、「やり方を後から指定できる」と考えると理解しやすくなります。 C#のラムダ式とデリゲートは、まさにこの考え方を実現する仕組みです。
3. C#でラムダ式を引数に受け取る基本形
C#でラムダ式を引数に受け取るには、デリゲート型を使います。
初心者の方には、標準で用意されているActionやFuncを使うのがおすすめです。
Actionは「処理はするが、結果を返さない」ラムダ式を受け取るための型です。
まずは一番シンプルな例を見てみましょう。
static void Execute(Action action)
{
action();
}
このメソッドは、Action型の引数を1つ受け取り、その中身を実行しています。
ここで重要なのは、「何を実行するか」をメソッドの外から渡せる点です。
4. ラムダ式を実際に引数として渡してみよう
では、先ほどのメソッドにラムダ式を渡してみます。 ラムダ式はその場で書けるので、別にメソッドを定義する必要がありません。
Execute(() =>
{
Console.WriteLine("ラムダ式が実行されました");
});
このコードでは、「画面に文字を表示する処理」をラムダ式として渡しています。
Executeメソッドは、その内容を知らなくても実行できます。
これが、高階関数の基本的な考え方です。
ラムダ式が実行されました
5. 引数を受け取るラムダ式を渡す場合
ラムダ式は、引数を受け取ることもできます。
その場合は、Action<型>を使います。
ここでは、数値を受け取って表示する例を見てみましょう。
static void ShowNumber(Action<int> action)
{
action(10);
}
このメソッドは、整数を受け取るラムダ式を引数として受け取り、
そのラムダ式に10を渡して実行しています。
ShowNumber(number =>
{
Console.WriteLine(number);
});
10
このように、メソッド側で値を用意し、処理の内容だけを外から指定できるのが特徴です。 C#のラムダ式をメソッド引数に渡すことで、プログラムの柔軟性が大きく向上します。
6. なぜラムダ式を引数に渡すのか
C#でラムダ式をメソッド引数に渡す理由は、「同じ流れで、処理だけを変えたい」場面が多いからです。 繰り返し処理や条件による動作の違いを、シンプルに書けるようになります。
初心者のうちは難しく感じるかもしれませんが、 「やり方を後から渡せる仕組み」と考えると理解しやすくなります。 ラムダ式と高階関数は、C#のモダンな書き方を支える重要な要素です。
この考え方に慣れてくると、C#の標準機能やライブラリの理解も一気に進みます。 まずは、簡単な例から少しずつ使ってみることが大切です。