.NET ヘルプ

C# Yield Return(開発者向けの動作メカニズム)

更新済み 1月 27, 2024
共有:

C#は、マイクロソフトによって開発された最も人気のあるプログラミング言語の1つであり、コードに優雅さと効率性を加える機能を提供します。 以下の内容を日本語に翻訳してください:

そのような機能の1つが、C# 2.0で最初に導入されたyieldキーワードです。マイクロソフトは、イテレータメソッドでの使用についてより詳しく調べるための完全な言語リファレンスを提供しており、それを参照できます。 これ.

この記事では、C#におけるyield returnについて、その機能、使用例、および反復処理へのアプローチを変える方法を探ります。

基本を理解する: C#におけるイテレーション

反復はプログラミングの基本的な概念であり、C#はそれを実現するためのさまざまなメカニズムを提供します。 従来、コレクションを反復処理する際には、forループやforeachループのようなループ構造が最も使われるツールでした。 しかし、C#ではyieldキーワードをreturn文に適用し、IEnumerableインターフェースを使用することにより、よりエレガントな解決策が導入されます。

yield return 文の効率性

本質的に、yield return はイテレーターメソッドで使用され、一連の値をより効率的に生成するためのステートメントです。 これにより、メモリ内に全コレクションを生成する必要なく、イテレーターを作成することができます。特に、大規模なデータセットや無限のシーケンスに対して有用です。

以下は、yield return の基本的な使用方法を示す簡単なコードスニペットです:

public IEnumerable<int> GenerateNumbers(int start, int end)
{
    // for loop goes through numbers, start to end
    for (int i = start; i <= end; i++) 
    {
        yield return i; // returns each number without breaking the loop
    }
}

// Usage
// foreach loop calls the previous function
foreach (var number in GenerateNumbers(1, 5)) 
{
    Console.WriteLine(number); // Outputs numbers 1 - 5
}
public IEnumerable<int> GenerateNumbers(int start, int end)
{
    // for loop goes through numbers, start to end
    for (int i = start; i <= end; i++) 
    {
        yield return i; // returns each number without breaking the loop
    }
}

// Usage
// foreach loop calls the previous function
foreach (var number in GenerateNumbers(1, 5)) 
{
    Console.WriteLine(number); // Outputs numbers 1 - 5
}
Public Iterator Function GenerateNumbers(ByVal start As Integer, ByVal [end] As Integer) As IEnumerable(Of Integer)
	' for loop goes through numbers, start to end
	For i As Integer = start To [end]
		Yield i ' returns each number without breaking the loop
	Next i
End Function

' Usage
' foreach loop calls the previous function
For Each number In GenerateNumbers(1, 5)
	Console.WriteLine(number) ' Outputs numbers 1 - 5
Next number
VB   C#

この例では、GenerateNumbersメソッドが yield return を使用して、start から end までの一連の数字を生成します。 反復子は遅延評価されており、反復処理の実行中に各数値が要求に応じて生成されます。

レイジー評価と効率

yield return ステートメントの大きな利点の一つは、遅延評価をサポートする能力です。 従来の方法がイテレーションの前にコレクション全体を生成するのに対し、yield return は一度に一つの値を生成します。これにより、大規模なデータセットを扱う際に大幅なメモリの節約が可能になります。

ステートフルなイテレーション: 複雑なシナリオの処理

yield returnステートメントは、単純なシーケンスの生成に限定されているわけではありません。 イテレーターブロックでより複雑なシナリオを処理するのに優れています。 反復処理を通じて状態機械を維持することで、シーケンス内の位置を記憶するイテレータを作成することができます。

public IEnumerable<string> GenerateFibonacci(int count)
{
    int a = 0, b = 1;
    for (int i = 0; i < count; i++)
    {
        yield return a.ToString(); // returns 'a' value in the middle of the for loop
        int temp = a;
        a = b;
        b = temp + b;
    }
}
// Usage
// foreach loop that calls the previous iterator function
foreach (var fibNumber in GenerateFibonacci(8))
{
    Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence
}
public IEnumerable<string> GenerateFibonacci(int count)
{
    int a = 0, b = 1;
    for (int i = 0; i < count; i++)
    {
        yield return a.ToString(); // returns 'a' value in the middle of the for loop
        int temp = a;
        a = b;
        b = temp + b;
    }
}
// Usage
// foreach loop that calls the previous iterator function
foreach (var fibNumber in GenerateFibonacci(8))
{
    Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence
}
Public Iterator Function GenerateFibonacci(ByVal count As Integer) As IEnumerable(Of String)
	Dim a As Integer = 0, b As Integer = 1
	For i As Integer = 0 To count - 1
		Yield a.ToString() ' returns 'a' value in the middle of the for loop
		Dim temp As Integer = a
		a = b
		b = temp + b
	Next i
End Function
' Usage
' foreach loop that calls the previous iterator function
For Each fibNumber In GenerateFibonacci(8)
	Console.WriteLine(fibNumber) ' Outputs a Fibonacci number sequence
Next fibNumber
VB   C#

この例では、GenerateFibonacciメソッドはyield returnを使用してフィボナッチ数列を生成します。 反復ごとに状態が維持され、効率的なフィボナッチ数の生成と出力を保証します。

無限シーケンスの構築

yield returnの興味深い応用の一つは、無限の値のシーケンスを生成する能力です。 値がその場で生成されるため、無限のメモリを消費することなく、無限に続くシーケンスを表現できます。

public IEnumerable<int> GenerateEvenNumbers()
{
    int num = 0;
    while (true)
    {
        yield return num;
        num += 2;
    }
}

// Usage
var evenNumberIterator = GenerateEvenNumbers().GetEnumerator();
for (int i = 0; i < 5; i++)
{
    evenNumberIterator.MoveNext();
    Console.WriteLine(evenNumberIterator.Current);
}
public IEnumerable<int> GenerateEvenNumbers()
{
    int num = 0;
    while (true)
    {
        yield return num;
        num += 2;
    }
}

// Usage
var evenNumberIterator = GenerateEvenNumbers().GetEnumerator();
for (int i = 0; i < 5; i++)
{
    evenNumberIterator.MoveNext();
    Console.WriteLine(evenNumberIterator.Current);
}
Public Iterator Function GenerateEvenNumbers() As IEnumerable(Of Integer)
	Dim num As Integer = 0
	Do
		Yield num
		num += 2
	Loop
End Function

' Usage
Private evenNumberIterator = GenerateEvenNumbers().GetEnumerator()
For i As Integer = 0 To 4
	evenNumberIterator.MoveNext()
	Console.WriteLine(evenNumberIterator.Current)
Next i
VB   C#

この例では、GenerateEvenNumbersメソッドが偶数のイテレーターを作成し、必要に応じてそれを反復処理できます。 yield returnと共にyield break文を使用してループを停止および終了し、ループのカスタム反復を行うこともできます。

IronPDFの紹介: 強力なC#ライブラリ

C# Yield Return(開発者向けの仕組み):図1 - IronPDFウェブページ

IronPDF PDF処理の複雑さを簡素化するために設計された多用途なC#ライブラリとして際立っています。 請求書、レポート、またはその他のドキュメントを生成する場合でも、IronPDFはC#アプリケーション内でHTMLコンテンツをシームレスに洗練されたプロフェッショナルなPDFに変換する力を提供します。

IronPDFのインストール: クイックスタート

IronPDFをC#プロジェクトに組み込むには、IronPDFのNuGetパッケージを迅速にインストールすることができます。 パッケージマネージャーコンソールで次のコマンドを実行してください: もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

Install-Package IronPDF もちろんです!翻訳したいコンテンツを提供してください。それに従って正確な日本語訳を提供いたします。

または、「IronPDF」をNuGetパッケージマネージャーで見つけて、そこからインストールすることもできます。

IronPDFでPDFを生成する

IronPDFを使用してPDFを作成することは簡単なプロセスです。 基本的な例を考えてみましょう:

var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
' Create a new PDF document
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf")
VB   C#

上記の例では、IronPDF がレンダリングに使用されています。 HTMLコンテンツをPDFドキュメントに指定された場所に保存されます。 詳細な情報については、次のウェブサイトをご覧ください。 ドキュメント ページ

yield returnとIronPDFの交差点

さて、「yield return」ステートメント、遅延評価と効率的なイテレーションのための強力なツールが、IronPDFとシームレスに統合できるかどうかを探ってみましょう。

次のシナリオを考えてみましょう。yield return を使用してアイテムのリストを含むPDFドキュメントを生成する必要がある場合。 yield文の利点を活かして動的にコンテンツを生成し、その後にIronPDFを使用してそのコンテンツをPDFに変換できます。 次のコードスニペットは、yieldステートメントを使用してPDFコンテンツに動的な制御を加えながら、PDF文書を生成します:

class Program
{
    static void Main(string [] args)
    {
        public IEnumerable<string> GenerateDynamicContent()
        {
            yield return "Item 1";
            yield return "Item 2";
            yield return "Item 3";
        }

        // Usage
        var dynamicContent = GenerateDynamicContent();
        var dynamicPdfContent = $@"
            <html>
            <body>
                <h1>List of Items</h1>
                <ul>
                    {string.Join("", dynamicContent.Select(item => $"<li>{item}</li>"))}
                </ul>
            </body>
            </html>
        ";

        // Create a new PDF document with dynamically generated content
        var dynamicPdfDocument = new IronPdf.ChromePdfRenderer();
        dynamicPdfDocument.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf");
    }
}
class Program
{
    static void Main(string [] args)
    {
        public IEnumerable<string> GenerateDynamicContent()
        {
            yield return "Item 1";
            yield return "Item 2";
            yield return "Item 3";
        }

        // Usage
        var dynamicContent = GenerateDynamicContent();
        var dynamicPdfContent = $@"
            <html>
            <body>
                <h1>List of Items</h1>
                <ul>
                    {string.Join("", dynamicContent.Select(item => $"<li>{item}</li>"))}
                </ul>
            </body>
            </html>
        ";

        // Create a new PDF document with dynamically generated content
        var dynamicPdfDocument = new IronPdf.ChromePdfRenderer();
        dynamicPdfDocument.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'		public IEnumerable(Of string) GenerateDynamicContent()
'		{
'			yield Return "Item 1";
'			yield Return "Item 2";
'			yield Return "Item 3";
'		}

		' Usage
		Dim dynamicContent = GenerateDynamicContent()
, String.Join(TangibleTempVerbatstring.Format(mDoubleQuote, dynamicContent.Select(Function(item) $TangibleTempVerbatimCloseTag"<li>{item}</li>")), TangibleStringInterpolationMarker) var dynamicPdfContent = $"TangibleTempVerbatimOpenTagTangibleTempVerbatimStringLiteralLineJoin            <html>TangibleTempVerbatimStringLiteralLineJoin            <body>TangibleTempVerbatimStringLiteralLineJoin                <h1>List of Items</h1>TangibleTempVerbatimStringLiteralLineJoin                <ul>TangibleTempVerbatimStringLiteralLineJoin                    {0}ignoreignoreignoreignoreignore</ul></body></html>"

		' Create a new PDF document with dynamically generated content
		Dim dynamicPdfDocument = New IronPdf.ChromePdfRenderer()
		dynamicPdfDocument.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf")
	End Sub
End Class
VB   C#

この例では、GenerateDynamicContent メソッドは yield return を利用して動的なアイテムのシーケンスを提供します。 生成されたコンテンツはHTML構造に組み込まれ、IronPDFによってPDFドキュメントが作成されます。

C# Yield Return(開発者向けの動作説明):図2 - 前述のコードから生成されたPDF

結論

結論として、yield returnはイテレーションへのアプローチを一変させる、C#の強力でエレガントな機能です。 遅延評価をサポートし、ステートフルな反復を用いた複雑なシナリオの処理、無限シーケンスの作成が可能なため、プログラミングツールキットにおいて貴重なツールとなります。 大量のデータセットを扱う場合でも、洗練されたアルゴリズムを実装する場合でも、yield return を使用することで、より効率的で表現力豊かなコードを書くことができます。

yield return はコンテンツを効率的かつ必要に応じて生成するのに役立つ一方で、IronPDF はそのコンテンツをプロフェッショナルなPDFドキュメントにシームレスに変換します。 リスト、レポート、その他のドキュメントを動的に作成する場合でも、このシナジーはC#ドキュメント生成機能を新たな高みに引き上げる力を与えてくれます。 この強力な二重奏の可能性を受け入れ、動的で効率的に生成されたコンテンツでPDFを輝かせましょう。!

IronPDFは、 無料試用 商用モードと同様に、その完全な機能をテストするため。 ライセンス $749 から始めます。

< 以前
C# REPL(開発者向けの仕組み)
次へ >
C# 配列ソート(開発者向けの動作説明)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >