【C#】yield return とは何か

yield return とは

yield returnは、反復処理(イテレーション)を行うメソッド内で使用され、値を生成して順次返すために使用されます。

具体的には、yield returnを使用することで、メソッドが返す値が複数の値のシーケンスであることを示し、シーケンスの各要素を1つずつ反復処理の呼び出し元に返します。

public static IEnumerable<int> GenerateSequence(int start, int end)
{
    for (int i = start; i <= end; i++)
    {
        yield return i;
    }
}

このコードでは、GenerateSequenceメソッドが、startからendまでの整数のシーケンスを生成するために使用されています。yield return文は、シーケンス内の各要素を生成し、反復処理の呼び出し元に返しています。

一方、yield breakは、反復処理を早期に終了するために使用されます。yield breakが実行されると、反復処理は終了し、呼び出し元に制御が戻ります。

yield returnおよびyield breakは、反復処理によって複数の値を返す必要がある場合や、大量のデータを処理する必要がある場合に有用です。これにより、メモリ使用量を削減し、パフォーマンスを向上させることができます。

yield return を使うメリット

C#でyield returnを使用することのメリットは、大量のデータを効率的に処理し、メモリ使用量を削減することができることです。以下は、yield returnを使用した場合と使用しない場合のコード例です。

// yield returnを使用した場合
public static IEnumerable<int> GenerateSequence(int start, int end)
{
    for (int i = start; i <= end; i++)
    {
        yield return i;
    }
}

// yield returnを使用しない場合
public static List<int> GenerateSequence(int start, int end)
{
    List<int> sequence = new List<int>();
    for (int i = start; i <= end; i++)
    {
        sequence.Add(i);
    }
    return sequence;
}

この例では、GenerateSequenceメソッドが、startからendまでの整数のシーケンスを生成するために使用されています。最初のコードでは、yield returnを使用して、シーケンス内の各要素を生成し、反復処理の呼び出し元に返しています。一方、2番目のコードでは、List<int>を使用して、シーケンスを生成し、そのリストを呼び出し元に返しています。

yield returnを使用した場合は、メモリ使用量が大幅に削減されます。これは、yield returnが値を順次生成し、メモリに保持する必要がないためです。
一方、yield returnを使用しない場合は、シーケンス全体をメモリに保持する必要があるため、大量のデータを処理する場合には、メモリ使用量が大きくなってしまいます。

このように、yield returnを使用することで、大量のデータを効率的に処理することができ、メモリ使用量を削減することができます。

Leave a Reply

Your email address will not be published. Required fields are marked *