我喜欢LINQ语句的表达语法和其他方便的功能.但是,我发现有时调试它们非常麻烦.具体来说,当我在集合上运行LINQ语句并且集合中的一个元素导致异常时,如何确定问题输入是什么以及问题来自何处?
想象一下,我有一个包含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));
现在,对于这个特殊的输入,我没有仔细查看它,结果显示第876行包含(行号显示):
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的字符串,并且我可以将鼠标悬停在行上以轻松查看问题输入是什么.
当然,我可以使用Resharper将我的LINQ语句转换为for循环,然后调试它们,但是有更好的方法吗?