.NETヘルプ C# Yield Return (開発者向けの仕組み) Curtis Chau 更新日:6月 22, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 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パッケージを迅速にインストールできます。 パッケージマネージャコンソールで次のコマンドを実行します: 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。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# REPL (開発者向けの仕組み)C# Array Sort (開発者向けの...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む