C#
ハマり②: 射影の途中で null を踏んで NullReferenceException
出典: C# LINQ Select の3パターン — 単純射影 / 匿名型整形 / インデックス付きの使い分け — ハマりポイント: 知らないと一晩飛ぶやつ / ハマり②: 射影の途中で null を踏んで NullReferenceException
class Dept { public string Name { get; set; } }
class Emp { public string Name { get; set; } public Dept Dept { get; set; } }
class Program
{
static void Main()
{
var emps = new[]
{
new Emp { Name = "佐藤", Dept = new Dept { Name = "経理" } },
new Emp { Name = "鈴木", Dept = null } // 部署 未設定
};
// Dept が null の行で落ちる
var ng = emps.Select(e => e.Dept.Name).ToList(); // NullReferenceException
Console.WriteLine(string.Join(", ", ng));
}
}
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「ハマりポイント: 知らないと一晩飛ぶやつ / ハマり②: 射影の途中で null を踏んで NullReferenceException」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
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 Program { static void Main() {
▶ 実行可
ハマり①: Select は foreach するまで実行されない(遅延評価)
#b2e4130e3fde
