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

标签 c# linq debugging visual-studio-2012

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

最佳答案

在lambda函数上打条件断点,条件为s.StartsWith("5.56")。您只需要将光标放在 lambda 上并按 F9。假设您使用的是 visual studio。

关于c# - 基于每个元素调试 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16318638/

相关文章:

c# - 如何在代码中访问 DataGridCell 的数据对象?

c# - 并非所有代码路径都返回一个值

xml - LINQ to XML 和命名空间的问题

c# - 函数返回值

c# - LINQ vs Lambda vs 匿名方法 vs 委托(delegate)

java - UVa 594 中的运行时错误

Emacs 中的调试方案

c# - 在 wpf 或 winform 中使用数据网格(或数据 GridView )时遇到问题

c# - 使用 linq OrderBy 按 ID 对列表进行排序

php - 如何在 cakephp 1.2.6 中回显最后一个查询