0Pricing
C# Academy · レッスン

IEnumerable<T>パイプラインと遅延実行

IEnumerable に対するLINQパイプラインを構築し、ToList/ToArrayによる具体化と遅延実行の違いを確認します。

「IEnumerable<T>パイプラインと遅延実行」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。

LINQパイプラインの考え方

パイプライン = シーケンスを変換する演算子のチェーンです。

  • ソース: IEnumerable<T>
  • 演算子: Where、Select など
  • シンク: 列挙(foreach)またはマテリアライズ(ToList)

Where + Select

Where、続いてSelectを使ってチェーンを作成します。反復処理するとクエリが実行されます。

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] numbers = new int[] { 1, 2, 3, 4, 5 };

    // Build pipeline: keep even numbers, then square them
    var query = numbers
      .Where(n => n % 2 == 0)
      .Select(n => n * n);

    foreach (int x in query)
    {
      Console.WriteLine(x); // 4, 16
    }
  }
}

遅延実行の効果

遅延実行: クエリは列挙時に評価されるため、後からソースを変更すると、その変更が反映されます。

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    List<int> data = new List<int>();
    data.Add(1);
    data.Add(2);

    var evens = data.Where(x => x % 2 == 0); // query is not executed yet

    data.Add(3);
    data.Add(4); // modify source after building query

    foreach (int e in evens)
    {
      Console.WriteLine(e); // prints 2 and 4 because execution is deferred
    }
  }
}

マテリアライズ(ToList)

ToList/ToArrayを使ってシーケンスを今すぐマテリアライズし、後からのソース変更を反映しないようにします。

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    List<string> words = new List<string>();
    words.Add("apple");
    words.Add("banana");

    var longOnes = words.Where(w => w.Length >= 6);
    List<string> snapshot = longOnes.ToList(); // materialize now

    words.Add("pear");     // changes after materialization
    words.Add("cherry");   // length 6, but snapshot is already frozen

    foreach (string w in snapshot)
    {
      Console.WriteLine(w); // prints "banana" only
    }
  }
}

OrderBy + Take

OrderBy、Select、Take/Skipを組み合わせて、小さく読みやすいパイプラインを作成します。

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] nums = new int[] { 5, 1, 4, 2, 3 };

    var firstTwoSortedSquares = nums
      .OrderBy(n => n)   // 1,2,3,4,5
      .Select(n => n * n)
      .Take(2);          // 1,4

    foreach (int x in firstTwoSortedSquares)
    {
      Console.WriteLine(x);
    }
  }
}

ヒントと注意点

ヒント:

  • クエリは計画を構築し、列挙またはマテリアライズしたときに実行されます。
  • 安定したスナップショットが必要な場合は、ToListでマテリアライズします。
  • 各ステップを小さくし、わかりやすい名前を付けます。
  • 高コストなソースの再列挙を避け、必要ならリストに保存します。

遅延実行のルール

確認: IEnumerable に対する LINQ では、クエリは実際にはいつ実行されますか?

要約

要約: Where/Selectなどを使って小さなIEnumerable<T>パイプラインを構築します。実行は、反復処理するかToList/ToArrayを呼び出すまで遅延されることを忘れないでください。

よくある質問

「IEnumerable<T>パイプラインと遅延実行」レッスンは無料ですか?

はい。「IEnumerable<T>パイプラインと遅延実行」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。

「IEnumerable<T>パイプラインと遅延実行」で何を学びますか?

IEnumerable に対するLINQパイプラインを構築し、ToList/ToArrayによる具体化と遅延実行の違いを確認します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「IEnumerable<T>パイプラインと遅延実行」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. IEnumerable パイプラインと遅延実行
  2. Select、Where、OrderBy、Take/Skip
  3. クエリ構文とメソッド構文
← C# Academyに戻る