.NET ヘルプ

C# ラムダ式(開発者向けの動作説明)

公開済み 2024年6月6日
共有:

イントロダクション

C# プログラミングの分野では、ラムダ式は最も強力な機能の一つです。 これらの簡潔で表現力豊かな構造は、開発者がコンパクトでありながらも堅牢なコードを書くことを可能にし、可読性、保守性、全体的な効率を向上させます。

この記事では、C#ラムダ式について深く掘り下げ、その構文、使用例、利点、および高度な技術を探っていきます。 また、探索していきます。IronPdfの機能からIron SoftwareC#アプリケーションでPDFドキュメントをオンザフライで生成できます。

ラムダ式の理解

ラムダ式は、C# 3.0で導入され、匿名関数やデリゲートを簡潔に定義する方法を提供します。 それらは基本的にインライン匿名関数で、デリゲート型が期待される場所で使用できます。

ラムダ式の構文は次のとおりです:

(parameters) => expression // lambda operator oe method syntax
x=> x*x // expression to square a number
(parameters) => expression // lambda operator oe method syntax
x=> x*x // expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'(parameters) => expression x=> x*x ' expression to square a number
VB   C#

こちらでは、パラメーターはラムダ式の入力パラメーターであり、式は実行される文または文のブロックです。 .NET 共通言語ランタイムは、コンパイル時に各ラムダ式のために匿名関数を作成します。

基本的な使用法

次に、リスト内の整数から偶数をフィルターする例として、ラムダ式を見てみましょう。

これを達成するために、List<T>.FindAll` メソッドとラムダ式:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 3 == 0);
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 3 == 0);
Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim evenNumbers As List(Of Integer) = numbers.FindAll(Function(x) x Mod 3 = 0)
VB   C#

上記の例では、x => x % 3 == 0 は、整数 x を入力パラメーターとして受け取り、x が偶数である場合は true を返し、そうでない場合は false を返すラムダ式です。ラムダ本体の式は各配列要素に対して実行されます。

ユースケース

モダンなアプリケーションプログラミングにおいて、Lambda式の利用はさまざまなユースケースで見られます。

  1. LINQ クエリ: ラムダ式は LINQ で広く使用されます(言語統合クエリ (言語統合クエリ (Language Integrated Query)))データコレクションに対してフィルタリング、投影、並べ替え、およびグループ化操作を実行するために。

  2. イベント処理:イベントとデリゲートを扱う際、ラムダ式はインラインでイベントハンドラーを定義するための簡潔な方法を提供します。

  3. 非同期プログラミング:Task.Runのような非同期プログラミングパターンでは、ラムダ式を使用して実行される非同期操作を定義することができます。

  4. 関数型プログラミング:ラムダ式は関数型プログラミングパラダイムをサポートし、コレクションに対するmap、filter、reduceのような操作を可能にします。

ラムダ式の種類

式ラムダ

=> を使ったラムダ式は、式ラムダと呼ばれます。 以下の形式を取ります:

x=> x*x // expression to square a number
x=> x*x // expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'x=> x*x ' expression to square a number
VB   C#

上記の例では、数値の平方を作成しています。 式ラムダでは、ボディにメソッド呼び出しを含めることができます。 ただし、.NET共通言語ランタイムの外で評価することを目的とした式ツリーを生成する場合(CLR (共通言語ランタイム))SQL Serverなどでは、ラムダ式内でのメソッド呼び出しを避けることが推奨されます。

これはメソッドがCLRコンテキストの外では意味を持たない場合があるためです。 したがって、式ツリーを構築する際には、ターゲット環境を考慮して、互換性と意味のある解釈を確保することが重要です。

ステートメントラムダ

以下のコードは、ステートメントラムダ式を宣言する方法を示しています。 以下のコードでは、パラメータと本体のみを持つメソッドを持つデリゲートが最初に宣言されています。

次に、必要に応じて、関数/メソッド名がデリゲートパラメーターに追加されます。

Func<int> mySquareDelegate = (x =>
{
    return x*x;
});
Console.WriteLine(mySquareDelegate(4));
Func<int> mySquareDelegate = (x =>
{
    return x*x;
});
Console.WriteLine(mySquareDelegate(4));
Dim mySquareDelegate As Func(Of Integer) = (Function(x)
	Return x*x
End Function)
Console.WriteLine(mySquareDelegate(4))
VB   C#

上級技術

変数のキャプチャ

ラムダ式は囲まれたスコープから変数をキャプチャできます。 この機能は、変数のキャプチャリングまたはクロージャーとして知られ、ラムダ式がその本体外で宣言された変数にアクセスして使用することを可能にします。

int factor = 2;
Func<int, int> multiplier = x => x * factor;
int factor = 2;
Func<int, int> multiplier = x => x * factor;
Dim factor As Integer = 2
Dim multiplier As Func(Of Integer, Integer) = Function(x) x * factor
VB   C#

この例では、ラムダ式 x => x * factor が囲むスコープから factor 変数をキャプチャしています。

複数のパラメータとステートメント

ラムダ式は複数のパラメータを持つことができ、ブロックで囲まれた複数のステートメントを実行することができます。

Func<int, int, int> add = (a, b) => 
{
    int result = a + b;
    Console.WriteLine($"The sum of {a} and {b} is {result}");
    return result;
};
Func<int, int, int> add = (a, b) => 
{
    int result = a + b;
    Console.WriteLine($"The sum of {a} and {b} is {result}");
    return result;
};
Dim add As Func(Of Integer, Integer, Integer) = Function(a, b)
	Dim result As Integer = a + b
	Console.WriteLine($"The sum of {a} and {b} is {result}")
	Return result
End Function
VB   C#

IronPDFはIron SoftwareのPDFライブラリです。

IronPDFを探索するからの多用途で高性能なPDF生成・解析ライブラリである。Iron SoftwarePDFドキュメントを生成するために使用できる。

IronPDFは、次のコマンドを使用してNuGetパッケージマネージャーからインストールできます:

Install-Package IronPdf

以下に示すように、Visual Studioからインストールされます:

C# ラムダ式(開発者向けの仕組み):図 1 - NuGet パッケージ マネージャーを使用して IronPDF をインストール

では、ラムダ式を使用してPDF生成について詳しく見ていきましょう。

namespace IronPatterns;
class Program
{
    static void Main()
    {
        Console.WriteLine("-----------Iron Software-------------");
        var renderer = new ChromePdfRenderer(); // var pattern
        var content = " <h1> Iron Software is Awesome </h1> Made with IronPDF!";
        content += "<h2>Demo C# lambda expressions</h2>";
        content += $"<p>Generating Square of list of numbers x=>x*x</p>";
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        List<int> squares = numbers.Select(x => x * x).ToList();
        content += $"<p>Numbers list: {string.Join(",",numbers)}</p>";
        content += $"<p>Squares: {string.Join(",",squares)}</p>";
        var pdf = renderer.RenderHtmlAsPdf(content);
        pdf.SaveAs("output.pdf"); // Saves PDF
    }
}
namespace IronPatterns;
class Program
{
    static void Main()
    {
        Console.WriteLine("-----------Iron Software-------------");
        var renderer = new ChromePdfRenderer(); // var pattern
        var content = " <h1> Iron Software is Awesome </h1> Made with IronPDF!";
        content += "<h2>Demo C# lambda expressions</h2>";
        content += $"<p>Generating Square of list of numbers x=>x*x</p>";
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        List<int> squares = numbers.Select(x => x * x).ToList();
        content += $"<p>Numbers list: {string.Join(",",numbers)}</p>";
        content += $"<p>Squares: {string.Join(",",squares)}</p>";
        var pdf = renderer.RenderHtmlAsPdf(content);
        pdf.SaveAs("output.pdf"); // Saves PDF
    }
}
Namespace IronPatterns
	Friend Class Program
		Shared Sub Main()
			Console.WriteLine("-----------Iron Software-------------")
			Dim renderer = New ChromePdfRenderer() ' var pattern
			Dim content = " <h1> Iron Software is Awesome </h1> Made with IronPDF!"
			content &= "<h2>Demo C# lambda expressions</h2>"
			content &= $"<p>Generating Square of list of numbers x=>x*x</p>"
			Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
			Dim squares As List(Of Integer) = numbers.Select(Function(x) x * x).ToList()
			content &= $"<p>Numbers list: {String.Join(",",numbers)}</p>"
			content &= $"<p>Squares: {String.Join(",",squares)}</p>"
			Dim pdf = renderer.RenderHtmlAsPdf(content)
			pdf.SaveAs("output.pdf") ' Saves PDF
		End Sub
	End Class
End Namespace
VB   C#

出力

C# ラムダ式(開発者のための仕組み):図2

トライアルライセンス

IronPDFのコードは、から取得した試用ライセンスのみで実行できます。IronPDFトライアルライセンスページ. メールアドレスをポップアップに入力してライセンスキーを生成し、そのキーをメールに送信してください。

"IronPDF.LicenseKey": "<Your Key>"

AppSettings.Jsonファイルにライセンスキーを配置してください。

結論

C# のラムダ式は、インライン関数を簡潔かつ表現豊かに定義する方法を提供し、コードの可読性、保守性、および効率性を向上させます。 それらは、LINQクエリ、イベント処理、非同期プログラミング、および関数型プログラミングを含むさまざまな領域で応用されています。

ラムダ式をマスターすることにより、開発者はC#コードベースで生産性と優雅さの新たな次元を解き放つことができます。

あなたが経験豊富なC#開発者であろうと、またはプログラミングの旅を始めたばかりであろうと、ラムダ式の力を理解し活用することは、間違いなくあなたのプログラミングスキルを新たな高みへと引き上げるでしょう。

では、C#プロジェクトでラムダ式の美しさを体験し、実験し、受け入れてください。!

< 以前
C# 複数例外のキャッチ(開発者向けの仕組み)
次へ >
内部キーワード C# (開発者にとっての仕組み)