列挙子
C#における反復では、列挙可能(Enumerable)及び列挙子(Enumerator)が中心的な役割を持つ。
IEnumerableインターフェースを実装したメソッドは、foreachで反復処理することができる。IEnumeratorインターフェースは、IEnumerableを実装したオブジェクトを返す必要がある。
yield returnステートメントを使うことで、列挙子を簡単に生成することができる。yield returnステートメントは遅延評価される。
LINQ
SQLに類似したキーワードを使用して、データの反復と抽出を行える。クエリ式とメソッド形式の2種類の書き方がある。
using System;
using System.Linq;
namespace Sample
{
class Program
{
static void Main(string[] args)
{
var data = new[] {1,2,3,4};
var q =
from x in data
select x * x;
//var q = data.Select(x => x * x); と同じ
foreach (var result in q)
{
Console.WriteLine(result.ToString());
}
}
}
}