C#のLINQの自作サンプル
こちらはC#のLINQの内部構造の小さな拡張メソッドのサンプルです。以下のコードは、整数のリストから偶数だけを取り出すための拡張メソッド「EvenNumbers」を定義した例です。
using LinqExtensions;
class Program
{
static void Main(string[] args)
{
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.EvenNumbers();
foreach (var num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
namespace LinqExtensions
{
public static class Extensions
{
public static IEnumerable<int> EvenNumbers(this IEnumerable<int> source)
{
foreach (var num in source)
{
if (num % 2 == 0)
{
yield return num;
}
}
}
}
}
この拡張メソッドは、「IEnumerable<int>」という型に対して定義されています。拡張メソッドは、第一引数に「this」キーワードを付けた引数を持ち、その引数を拡張するためのメソッドとなります。つまり、「IEnumerable<int>」型の変数に対して「EvenNumbers」というメソッドが呼び出された場合、この拡張メソッドが呼び出されることになります。
この拡張メソッドは、foreach文で「source」という引数に渡されたリストの中身を1つずつ取り出し、その要素が偶数である場合にだけ「yield return」キーワードを使って値を返しています。このように「yield return」キーワードを使うことで、呼び出し元に値を返すことができます。
このようにLINQの内部構造に詳しくなることで、自分で拡張メソッドを作成することができます。
ディスカッション
コメント一覧
まだ、コメントがありません