【发布时间】:2013-05-01 13:03:54
【问题描述】:
我喜欢 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 循环,然后对其进行调试,但有没有更好的方法?
【问题讨论】:
-
这是什么类型的 LINQ? EF 还是 LINQ to SQL?
标签: c# linq debugging visual-studio-2012