.NETヘルプ C# Yield Return (開発者向けの仕組み) Jacob Mellor 更新日:6月 22, 2025 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る C#は、Microsoftによって開発された最も人気のあるプログラミング言語の1つであり、コードに優雅さと効率を追加する機能を提供します。 その機能の1つが、C# 2.0で初めて導入されたyieldキーワードです。Microsoftは、イテレーターメソッドで使用するためのyieldキーワードのステートメントに関する完全な言語リファレンスを提供しており、公式のMicrosoftドキュメントでyieldについてを閲覧できます。 この記事では、C#のyield returnに注目し、その機能、使用例、そしてイテレーションへのアプローチをどのように変えることができるかを探ります。 基礎を理解する: C#のイテレーション イテレーションはプログラミングにおける基本的な概念であり、C#はそれを実現するためのさまざまなメカニズムを提供しています。 伝統的に、コレクションをイテレートするためには、forループやforeachループが利用されてきました。 しかし、C#は、returnステートメントに適用されるyieldキーワードと、IEnumerableインターフェースの使用によって、より優雅な解決策を提供します。 yield returnステートメントの効率性 yield returnは、イテレーターメソッドで値のシーケンスを生成するためのより効率的な方法を提供するステートメントです。 これは、メモリ内の全コレクションを生成する必要がなくイテレーターを作成できるため、特に大規模なデータセットや無限のシーケンスを扱う際に有用です。 yield returnの基本的な使用法を説明する簡単なコードスニペットを示します: using System; using System.Collections.Generic; public class Example { // Method that generates numbers from start to end using 'yield return' public IEnumerable<int> GenerateNumbers(int start, int end) { // Loop from 'start' to 'end' for (int i = start; i <= end; i++) { yield return i; // Returns each number in the sequence without breaking the loop } } public static void Main() { // Usage: Using 'foreach' to iterate over numbers generated by 'GenerateNumbers' foreach (var number in new Example().GenerateNumbers(1, 5)) { Console.WriteLine(number); // Outputs numbers 1 - 5 } } } using System; using System.Collections.Generic; public class Example { // Method that generates numbers from start to end using 'yield return' public IEnumerable<int> GenerateNumbers(int start, int end) { // Loop from 'start' to 'end' for (int i = start; i <= end; i++) { yield return i; // Returns each number in the sequence without breaking the loop } } public static void Main() { // Usage: Using 'foreach' to iterate over numbers generated by 'GenerateNumbers' foreach (var number in new Example().GenerateNumbers(1, 5)) { Console.WriteLine(number); // Outputs numbers 1 - 5 } } } Imports System Imports System.Collections.Generic Public Class Example ' Method that generates numbers from start to end using 'yield return' Public Iterator Function GenerateNumbers(ByVal start As Integer, ByVal [end] As Integer) As IEnumerable(Of Integer) ' Loop from 'start' to 'end' For i As Integer = start To [end] Yield i ' Returns each number in the sequence without breaking the loop Next i End Function Public Shared Sub Main() ' Usage: Using 'foreach' to iterate over numbers generated by 'GenerateNumbers' For Each number In (New Example()).GenerateNumbers(1, 5) Console.WriteLine(number) ' Outputs numbers 1 - 5 Next number End Sub End Class $vbLabelText $csharpLabel この例では、GenerateNumbersメソッドがyield returnを使用してstartからendまでの数値のシーケンスを生成します。 イテレーターは遅延評価され、各数値はイテレーションの実行中に要求に応じて生成されます。 遅延評価と効率性 yield returnステートメントの大きな利点の1つは、遅延評価をサポートする能力です。 伝統的な方法がイテレーションの前にコレクション全体を生成するのとは異なり、yield returnは値を1つずつ生成します。これは、大規模なデータセットを扱う際に、特にメモリ節約につながる可能性があります。 状態保持型イテレーション: 複雑なシナリオの処理 yield returnステートメントは単純なシーケンスを生成するだけに限らず、 イテレーター・ブロックで複雑なシナリオを処理するのに優れています。 イテレーションを通じて状態機械を維持することで、シーケンス内の位置を記憶するイテレーターを作成することができます。 using System; using System.Collections.Generic; public class FibonacciExample { // Method that generates Fibonacci numbers up to the specified count public IEnumerable<string> GenerateFibonacci(int count) { int a = 0, b = 1; for (int i = 0; i < count; i++) { yield return a.ToString(); // Returns the Fibonacci number as a string int temp = a; a = b; b = temp + b; } } public static void Main() { // Usage: Iterating over Fibonacci numbers generated by 'GenerateFibonacci' foreach (var fibNumber in new FibonacciExample().GenerateFibonacci(8)) { Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence } } } using System; using System.Collections.Generic; public class FibonacciExample { // Method that generates Fibonacci numbers up to the specified count public IEnumerable<string> GenerateFibonacci(int count) { int a = 0, b = 1; for (int i = 0; i < count; i++) { yield return a.ToString(); // Returns the Fibonacci number as a string int temp = a; a = b; b = temp + b; } } public static void Main() { // Usage: Iterating over Fibonacci numbers generated by 'GenerateFibonacci' foreach (var fibNumber in new FibonacciExample().GenerateFibonacci(8)) { Console.WriteLine(fibNumber); // Outputs a Fibonacci number sequence } } } Imports System Imports System.Collections.Generic Public Class FibonacciExample ' Method that generates Fibonacci numbers up to the specified count 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 the Fibonacci number as a string Dim temp As Integer = a a = b b = temp + b Next i End Function Public Shared Sub Main() ' Usage: Iterating over Fibonacci numbers generated by 'GenerateFibonacci' For Each fibNumber In (New FibonacciExample()).GenerateFibonacci(8) Console.WriteLine(fibNumber) ' Outputs a Fibonacci number sequence Next fibNumber End Sub End Class $vbLabelText $csharpLabel この例では、GenerateFibonacciメソッドがyield returnを使用してフィボナッチ数列を作成します。 イテレーション間で状態が維持され、効率的にフィボナッチ数を生成および出力します。 無限のシーケンスを構築 yield returnの興味深い応用は、値の無限シーケンスを作成できることです。 値がオンザフライで生成されるため、無限メモリを消費することなく無限に続くシーケンスを表現できます。 using System; using System.Collections.Generic; public class InfiniteSequenceExample { // Method that generates an infinite sequence of even numbers public IEnumerable<int> GenerateEvenNumbers() { int num = 0; while (true) { yield return num; num += 2; } } public static void Main() { // Usage: Generating even numbers using the 'GenerateEvenNumbers' method var evenNumberIterator = new InfiniteSequenceExample().GenerateEvenNumbers().GetEnumerator(); for (int i = 0; i < 5; i++) { evenNumberIterator.MoveNext(); Console.WriteLine(evenNumberIterator.Current); // Outputs the first 5 even numbers } } } using System; using System.Collections.Generic; public class InfiniteSequenceExample { // Method that generates an infinite sequence of even numbers public IEnumerable<int> GenerateEvenNumbers() { int num = 0; while (true) { yield return num; num += 2; } } public static void Main() { // Usage: Generating even numbers using the 'GenerateEvenNumbers' method var evenNumberIterator = new InfiniteSequenceExample().GenerateEvenNumbers().GetEnumerator(); for (int i = 0; i < 5; i++) { evenNumberIterator.MoveNext(); Console.WriteLine(evenNumberIterator.Current); // Outputs the first 5 even numbers } } } Imports System Imports System.Collections.Generic Public Class InfiniteSequenceExample ' Method that generates an infinite sequence of even numbers Public Iterator Function GenerateEvenNumbers() As IEnumerable(Of Integer) Dim num As Integer = 0 Do Yield num num += 2 Loop End Function Public Shared Sub Main() ' Usage: Generating even numbers using the 'GenerateEvenNumbers' method Dim evenNumberIterator = (New InfiniteSequenceExample()).GenerateEvenNumbers().GetEnumerator() For i As Integer = 0 To 4 evenNumberIterator.MoveNext() Console.WriteLine(evenNumberIterator.Current) ' Outputs the first 5 even numbers Next i End Sub End Class $vbLabelText $csharpLabel この例では、GenerateEvenNumbersメソッドが偶数のイテレーターを作成し、必要に応じてそれをイテレートできます。 yield returnと共にyield breakステートメントを使用してループを停止および終了することで、ループにカスタムイテレーションを作ることもできます。 IronPDFの紹介: 強力なC#ライブラリ IronPDFは、PDFを扱う際の複雑さを簡素化するように設計された多用途なC#ライブラリとして際立っています。 請求書やレポート、その他のドキュメントを生成する際、IronPDFはHTMLコンテンツをシームレスに変換し、C#アプリケーション内で洗練されたプロフェッショナルなPDFを作成する力を提供します。 IronPDFのインストール:クイックスタート IronPDFをC#プロジェクトに組み込むには、IronPDF NuGetパッケージを迅速にインストールできます。 次のコマンドをPackage Manager Consoleで実行してください: Install-Package IronPdf または、NuGetパッケージマネージャーで"IronPDF"を見つけてそこからインストールすることもできます。 IronPDFでPDFを生成する IronPDFを使用してPDFを作成するのは簡単なプロセスです。 基本的な例を考えてみましょう: using IronPdf; public class PdfGenerationExample { public static void Main() { var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"; // Create a new PDF renderer instance var pdfRenderer = new ChromePdfRenderer(); // Render the HTML content as a PDF and save it to a file pdfRenderer.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf"); } } using IronPdf; public class PdfGenerationExample { public static void Main() { var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"; // Create a new PDF renderer instance var pdfRenderer = new ChromePdfRenderer(); // Render the HTML content as a PDF and save it to a file pdfRenderer.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf"); } } Imports IronPdf Public Class PdfGenerationExample Public Shared Sub Main() Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>" ' Create a new PDF renderer instance Dim pdfRenderer = New ChromePdfRenderer() ' Render the HTML content as a PDF and save it to a file pdfRenderer.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf") End Sub End Class $vbLabelText $csharpLabel 上記の例では、IronPDFを使用してHTMLコンテンツをPDFドキュメントに変換し、指定された場所に保存します。 より詳細な情報については、IronPDFのドキュメントをご覧ください。 yield returnとIronPDFの交差 次に、遅延評価と効率的なイテレーションのための強力なツールであるyield returnステートメントがIronPDFとシームレスに統合できるかどうかを探ります。 yield returnを使用して項目のリストを含むPDFドキュメントを生成する必要がある場合のシナリオを考えます。 yieldステートメントの利点を活用してコンテンツを動的に生成し、そのコンテンツをIronPDFを使用してPDFに変換することができます。 次のコードスニペットは、PDFコンテンツに対する動的制御を追加するためにyieldステートメントを使用してPDFドキュメントを生成します: using System; using System.Collections.Generic; using System.Linq; using IronPdf; class Program { // Method that dynamically generates content using 'yield return' public static IEnumerable<string> GenerateDynamicContent() { yield return "Item 1"; yield return "Item 2"; yield return "Item 3"; } public static void Main(string[] args) { // Generate dynamic content using the 'GenerateDynamicContent' function var dynamicContent = GenerateDynamicContent(); // Create HTML structure for the PDF document with dynamic content 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 dynamicPdfRenderer = new ChromePdfRenderer(); dynamicPdfRenderer.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf"); } } using System; using System.Collections.Generic; using System.Linq; using IronPdf; class Program { // Method that dynamically generates content using 'yield return' public static IEnumerable<string> GenerateDynamicContent() { yield return "Item 1"; yield return "Item 2"; yield return "Item 3"; } public static void Main(string[] args) { // Generate dynamic content using the 'GenerateDynamicContent' function var dynamicContent = GenerateDynamicContent(); // Create HTML structure for the PDF document with dynamic content 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 dynamicPdfRenderer = new ChromePdfRenderer(); dynamicPdfRenderer.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf"); } } Imports System Imports System.Collections.Generic Imports System.Linq Imports IronPdf Friend Class Program ' Method that dynamically generates content using 'yield return' Public Shared Iterator Function GenerateDynamicContent() As IEnumerable(Of String) Yield "Item 1" Yield "Item 2" Yield "Item 3" End Function Public Shared Sub Main(ByVal args() As String) ' Generate dynamic content using the 'GenerateDynamicContent' function Dim dynamicContent = GenerateDynamicContent() ' Create HTML structure for the PDF document with dynamic content , 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 dynamicPdfRenderer = New ChromePdfRenderer() dynamicPdfRenderer.RenderHtmlAsPdf(dynamicPdfContent).SaveAs("C:/DynamicItems.pdf") End Sub End Class $vbLabelText $csharpLabel この例では、GenerateDynamicContentメソッドがyield returnを使用して動的項目のシーケンスを提供します。 生成されたコンテンツはHTML構造に組み込まれ、IronPDFによってPDFドキュメントが作成されます。 結論 結論として、yield returnはイテレーションへのアプローチを変革する強力でエレガントなC#の機能です。 遅延評価をサポートし、状態を持つイテレーションで複雑なシナリオを処理し、無限のシーケンスを作成する能力は、プログラムツールキットにおいて価値のあるツールです。 大容量データセットを扱う場合や洗練されたアルゴリズムを実装する場合でも、yield returnはより効率的で表現力豊かなコードを書く手助けをします。 yield returnがコンテンツの効率的でオンデマンドな生成を促進する一方で、IronPDFはそのコンテンツをプロフェッショナルなPDFドキュメントにシームレスに変換します。 動的にリスト、レポート、またはその他の文書を作成する際に、このシナジーがC#ドキュメント生成能力を新たな高みへと引き上げることができます。 この動的デュオの可能性を受け入れて、あなたのPDFを動的で効率的に生成されたコンテンツで輝かせましょう! IronPDFは、その完全な機能を商業モードと同様にテストする無料トライアルを提供しています。 IronPDFライセンスについて学び、$799から始めることができます。 よくある質問 C# の反復処理を強化するために yield return 文をどのように使用できますか? yield return 文は、C# で効率的にシーケンスを生成するために利用できます。これは、値をオンデマンドで生成するイテレータを作成でき、すべてのコレクションを保存する必要がないため、メモリを節約できます。 大規模なデータセットを扱う際に yield return が提供する利点は何ですか? yield return は、値が必要に応じて生成される遅延評価の利点を提供します。完全なシーケンスをメモリ内に保存する必要がないため、大規模なデータセットを扱う際のメモリ使用量が大幅に削減されます。 C# での PDF 生成と組み合わせて yield return を使用できますか? はい、yield return を使用して動的に生成したコンテンツを、IronPDF を使用して PDF 形式に変換することができます。このアプローチは、C# アプリケーション内で効率的で動的なドキュメント生成を容易にします。 yield return は C# での無限シーケンスの作成をどのように簡素化しますか? yield return は、オンザフライで値を生成することによって無限シーケンスの作成を簡素化します。これは、メモリを消耗せずに無期限に値を生成し続けることができるということを意味します。 C# プログラミングにおいて、遅延評価の利点は何ですか? C# では、yield return によって促進される遅延評価は、反復処理中に必要に応じて値を計算することを可能にします。これにより、メモリ使用量が効率化され、広範なまたは複雑なデータシーケンスを扱う際にパフォーマンスが向上します。 C# ライブラリを使用して HTML コンテンツを PDF に変換するにはどうすればよいですか? C# で HTML コンテンツを PDF に変換するには、IronPDF ライブラリを使用できます。このライブラリの ChromePdfRenderer は、HTML および CSS をプロフェッショナルグレードの PDF ドキュメントに変換できます。 IronPDF と yield return を組み合わせた実際の使用例は何ですか? 実際の使用例としては、yield return を用いて動的にレポートデータを生成し、それを IronPDF を用いて PDF に変換することです。この方法は、すべてのコンテンツをメモリで事前生成することなく、動的なドキュメントを作成するのに効率的です。 C# で yield return を使用することの主な利点は何ですか? yield return は、遅延評価によるメモリ効率の向上、複雑な反復処理シナリオを管理する能力、メモリオーバーフローなしで無限のシーケンスを生成する可能性など、いくつかの利点を提供します。 PDF 操作のために C# ライブラリをインストールするにはどうすればよいですか? PDF 操作のための IronPDF のようなライブラリを C# プロジェクトにインストールするには、NuGet パッケージ マネージャーで次のコマンドを使用します: Install-Package IronPDF。 Jacob Mellor 今すぐエンジニアリングチームとチャット 最高技術責任者(CTO) Jacob Mellorは、Iron Softwareの最高技術責任者であり、C# PDF技術の開拓者としてその先進的な役割を担っています。Iron Softwareのコアコードベースのオリジナルデベロッパーである彼は、創業時から製品のアーキテクチャを形作り、CEOのCameron Rimingtonと協力してNASA、Tesla、全世界の政府機関を含む50人以上の会社に成長させました。Jacobは、1998年から2001年にかけてマンチェスター大学で土木工学の第一級優等学士号(BEng)を取得しました。1999年にロンドンで最初のソフトウェアビジネスを立ち上げ、2005年には最初の.NETコンポーネントを作成し、Microsoftエコシステムにおける複雑な問題の解決を専門にしました。彼の旗艦製品であるIronPDFとIronSuite .NETライブラリは、全世界で3000万以上のNuGetインストールを達成しており、彼の基本コードが世界中で使用されている開発者ツールを支えています。商業的な経験を25年間積み、コードを書くことを41年間続けるJacobは、企業向けのC#、Java、およびPython PDF技術の革新を推進し続け、次世代の技術リーダーを指導しています。 関連する記事 更新日 12月 11, 2025 CLIの簡素化と.NETの橋渡し:Curl DotNetとIronPDFを使う Jacob Mellorは、.NETエコシステムにcURLの親しみやすさをもたらすために作成されたライブラリ、CurlDotNetでこのギャップを埋めました。 詳しく読む 更新日 12月 20, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 12月 20, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# REPL (開発者向けの仕組み)C# Array Sort (開発者向けの...
更新日 12月 11, 2025 CLIの簡素化と.NETの橋渡し:Curl DotNetとIronPDFを使う Jacob Mellorは、.NETエコシステムにcURLの親しみやすさをもたらすために作成されたライブラリ、CurlDotNetでこのギャップを埋めました。 詳しく読む
更新日 12月 20, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 12月 20, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む