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

前端之家收集整理的这篇文章主要介绍了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.

猜你在找的C#相关文章