ソース IEnumerable シーケンスがあるとします。
IEnumerable<Tuple<int, int>> source = new [] {
new Tuple<int, int>(1, 2),
new Tuple<int, int>(2, 3),
new Tuple<int, int>(3, 2),
new Tuple<int, int>(5, 2),
new Tuple<int, int>(2, 0),
};
いくつかのフィルターといくつかの変換を適用します。
IEnumerable<int> result1 = source.Where(t => (t.Item1 + t.Item2) % 2 == 0)
.Select(t => t.Item2)
.Select(i => 1 / i);
IEnumerable<int> result2 = from t in source
where (t.Item1 + t.Item2) % 2 == 0
let i = t.Item2
select 1 / i;
これら 2 つのクエリは同等であり、どちらもDivideByZeroException
最後の項目に対して をスローします。
ただし、2 番目のクエリが列挙されると、VS デバッガーでクエリ全体を検査できるため、問題の原因を特定するのに非常に便利です。
ただし、最初のクエリが列挙された場合、同等のヘルプはありません。おそらくバイナリが最適化されているため、LINQ 実装を調べても有用なデータは得られません。
IEnumerable
クエリ構文を使用していないときに、列挙可能な値を s の「スタック」まで有効に検査する方法はありますか? クエリ構文は、コードを共有できないため、オプションではありません (つまり、変換は重要であり、複数回使用されます)。