我喜欢 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
,我可以将鼠标悬停在上面row
以轻松查看问题输入是什么。
当然,我可以使用 Resharper 将我的 LINQ 语句转换为 for 循环,然后对其进行调试,但有更好的方法吗?