C#
ハマり①: Select は foreach するまで実行されない(遅延評価)
出典: C# LINQ Select の3パターン — 単純射影 / 匿名型整形 / インデックス付きの使い分け — ハマりポイント: 知らないと一晩飛ぶやつ / ハマり①: Select は foreach するまで実行されない(遅延評価)
class Program
{
static void Main()
{
var names = new[] { "佐藤", "鈴木", "高橋" };
var query = names.Select(n =>
{
Console.WriteLine("射影中: " + n);
return n + " さん";
});
Console.WriteLine("--- foreach 前 ---");
foreach (var x in query) { }
Console.WriteLine("--- foreach 後 ---");
}
}
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「ハマりポイント: 知らないと一晩飛ぶやつ / ハマり①: Select は foreach するまで実行されない(遅延評価)」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
6 件public class Employee { public int Id { get; set; } public string Name { get; set; }未収録
最短対処: コピペで動く3つの Select
#fa5486377d42
// List から名前だけ取り出す var names = employees.Select(e => e.Name).ToList(); // DataTable から型付きで1列取り出す(業務SE頻出)未収録
パターン①: 単純射影(1列だけ・型付きで取り出す)
#6364f5bd7109
var view = employees.Select(e => new { e.Id, 名前 = e.Name,未収録
パターン②: 匿名型へ整形(複数列をまとめて画面/CSV用に)
#567ac35b66ff
var rows = dt.AsEnumerable().Select(r => new { Id = r.Field<int>("Id"), Name = r.Field<string>("Name"),未収録
パターン②: 匿名型へ整形(複数列をまとめて画面/CSV用に)
#a8c0879a3ee4
var numbered = employees.Select((e, i) => new { No = i + 1, // 1 始まりにしたいので +1 名前 = e.Name未収録
パターン③: インデックス付き Select(行番号・連番を振る)
#9cf00057024d
class Dept { public string Name { get; set; } } class Emp { public string Name { get; set; } public Dept Dept { get; set; } } class Program
▶ 実行可
ハマり②: 射影の途中で null を踏んで NullReferenceException
#e34d11d16676
