C# 入門

ホーム > C# の基礎 > yield の使い方

yield の使い方

yield キーワードを使うと、テンポラリのコレクションを作成することなく、メソッドでコレクションを返すことができます。

この場合、IEnumerable<T> (T は型) を戻り値の型に設定します。

そして yield return を呼ぶと、その戻り値をいわば暗黙的なコレクションに保存していき、メソッドを抜けるときに結果を返します。

具体例をみてください。

using System;
using System.Collections.Generic;

namespace TestApp {

  class Program {
    static void Main( string[] args ) {
      var states = new List<string>();
      states.Add( "California" );
      states.Add( "Hawaii" );
      states.Add( "Connecticut" );
      states.Add( "Texas" );
      var i = FilterState( states, "C" );
      foreach( var m in i ) {
        Console.WriteLine( m );
      }
    }

    static IEnumerable<string> FilterState(
      List<string> states,
      string filter ) {
      foreach( var s in states ) {
        if( s.StartsWith( filter ) ) {
          yield return s;
        }
      }
    }
  }

}

この結果はつぎのようになります。

California
Connecticut

カリフォルニア (California) とコネチカット (Connecticut) が C から始まるので、ここで定義したメソッド FilterState でフィルターされ、 呼び出し元に返されていることがわかります。

このように yield return を使うと、明示的に一時的なコレクションを作成する必要がなくなります。

ホーム > C# の基礎 > yield の使い方