c# – 基于每个元素调试LINQ

我喜欢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循环,然后调试它们,但是有更好的方法吗?

解决方法

在lambda函数上放置一个条件断点,其条件为s.StartsWith(“5.56”).你只需要将光标放在lambda上并按F9即可.假设你正在使用visual studio.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么