表現力豊かな構文やその他の便利な機能を備えた LINQ ステートメントが大好きです。しかし、時々それらをデバッグするのは非常に面倒です。具体的には、コレクションに対して LINQ ステートメントを実行し、コレクション内の要素の 1 つが例外を引き起こした場合、問題の入力が何であり、どこから問題が発生したかをどのように把握できますか?
1000 の実数を含むテキスト ファイルがあるとします。
0.46578
12.314213
1.444876
...
これを として読み取りList<string>
、より具体的なデータ構造にロードしています。
var file_contents = File.ReadAllLines("myfile.txt");
var data = file_contents.Select(s => double.Parse(s));
さて、この特定の入力について、私はそれを注意深く見ようとはしませんでした。
875 5.56786450
876 Error: Could not calculate value.
878 0.0316213
なんらかの理由で (ファイルが誤動作したスクリプトによって生成された可能性があります)。もちろん、私の LINQ メソッド チェーンは例外をスローします。問題は、リストのどの要素が例外を引き起こし、その値が何であったかをどのように把握するかです。
明確にするために、代わりに for ループを使用した場合:
var data = new List<double>();
foreach(var row in file_contents)
{
var d = double.Parse(row);
data.Add(d);
}
次に、例外によって を呼び出す文字列が強調表示され、double.Parse
マウス カーソルを合わせるrow
と問題の入力が何であるかを簡単に確認できます。
もちろん、Resharper を使用して LINQ ステートメントを for ループに変換し、デバッグすることもできますが、もっと良い方法はありますか?