C#
イディオム3: DefaultIfEmpty()で空シーケンス時のフォールバック
出典: C# Linq で Null を回避する書き方とパフォーマンス(業務SEのコピペで動くやつ) — イディオム3: DefaultIfEmpty()で空シーケンス時のフォールバック
// ✅ DefaultIfEmptyで空シーケンス時のフォールバック
var prices = invoices
.Where(i => i.Region == "東京")
.Select(i => i.Amount)
.DefaultIfEmpty(0)
.Sum();
//該当行ゼロでも0が返る(例外なし)
var maxPrice = invoices
.Where(i => i.Region == "東京")
.Select(i => i.Amount)
.DefaultIfEmpty(0)
.Max();
//該当行ゼロでも0が返る(Max()のInvalidOperationException回避)
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「イディオム3: DefaultIfEmpty()で空シーケンス時のフォールバック」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
5 件// ✅ WhereでNull排除 var names = users .Where(u => u != null) .Select(u => u.Name)未収録
イディオム1: Where(x => x != null)でNullを弾く
#ee218e931976
// ✅ OfTypeでNull排除+型絞り込み object[] mixed = { "alice", null, 42, "bob", null, "carol" }; var strings = mixed.OfType<string>().ToList(); // → ["alice", "bob", "carol"]未収録
イディオム2: OfType<T>()でNull +型絞り込みを同時にやる
#14f9efe17681
// ✅ Field<T> + ??でNull補完 var names = dt.AsEnumerable() .Select(r => r.Field<string>("name")?? "(unknown)") .ToList();未収録
イディオム4: ??演算子でField<T>()のNullを補完
#12c62cae638e
// ✅ ?.連鎖でNull中継 var firstItemName = order?.Items?.FirstOrDefault()?.Name ?? "(no item)"; // Linqとの組み合わせ未収録
イディオム5: ?.連鎖でnull中継を許容する
#8f2d66c1e375
// ✅ 10万件のホットパスでLinq → forに書き換え // Linq版(800ms前後) var sumLinq = items .Where(i => i != null && i.Price > 0)未収録
パフォーマンス: 10万件規模でLinq vs forループ
#0055f5f685f4
