C#Note | Visual Studio | MSDN | MSDN ライブラリ | VSUG |
301: 遅延実行
クエリは、実際に値が必要になった時に実行される
private void button1_Click(object sender, EventArgs e) {
    /* クエリの遅延評価 */
    string[] names = { "川口 能活", "中村 俊輔", "玉田 圭司" };
 
    /* ここでクエリは実行されない */
    var query = from s in names select s;
 
    Console.WriteLine("--- 1.ここで初めてクエリが実行される ---");
    foreach (var item in query) {
        Console.WriteLine(item);
    }
 
    names[0] = "楢崎 正剛";
 
    Console.WriteLine("--- 2.ここで再度クエリが実行される ---");
    foreach (var item in query) {
        Console.WriteLine(item);
    }
}

--- 1.ここで初めてクエリが実行される ---
川口 能活
中村 俊輔
玉田 圭司
--- 2.ここで再度クエリが実行される ---
楢崎 正剛
中村 俊輔
玉田 圭司
302: 即時実行
private void button1_Click(object sender, EventArgs e) {
    /* クエリの遅延評価 */
    string[] names = { "川口 能活", "中村 俊輔", "玉田 圭司" };
 
    /* ここでクエリは実行されない */
    var query = from s in names select s;
 
    var result = query.ToList();  // ここでクエリを実行して、Listに変換
 
    Console.WriteLine("--- 1.クエリは既に実行されている ---");
    foreach (var item in result) {
        Console.WriteLine(item);
    }
 
    names[0] = "楢崎 正剛";
 
    Console.WriteLine("--- 2.クエリは既に実行されている ---");
    foreach (var item in result) {
        Console.WriteLine(item);
    }
}

--- 1.クエリは既に実行されている ---
川口 能活
中村 俊輔
玉田 圭司
--- 2.クエリは既に実行されている ---
川口 能活
中村 俊輔
玉田 圭司
303:
304:
305:
306:
307:
308:
309:
310:
 
この Web サイトに関する感想などについては、takamorimail@yahoo.co.jpまで電子メールでお送りください。ただし、技術的な質問にはお答えできません。
Copyright (C) 2008 Takamori