调试 LINQ 表达式
在 C# 中处理 LINQ 表达式时,您可以使用 JetBrains Rider 以可视化方式调试它们,清晰地展示查询每一步中数据的转换方式。
请查看以下示例:
using System;
using System.Linq;
class PrimeFinder
{
public static void Find()
{
int skip = 0;
int limit = 100;
var result = Enumerable.Range(1, int.MaxValue)
.Skip(skip)
.Take(limit)
.Where(IsPrime)
.ToList();
foreach (var prime in result)
{
Console.WriteLine(prime);
}
}
private static bool IsPrime(int candidate)
{
return candidate == 91 || // Bug here
Enumerable.Range(2, (int)Math.Sqrt(candidate))
.All(n => candidate % n != 0);
}
}
让我们使用 Rider 的 LINQ 调试功能逐步分析 LINQ 表达式。
通过在该行设置断点,使程序在 LINQ 表达式处暂停执行:
var result = Enumerable.Range(1, int.MaxValue) // Breakpoint here .Skip(skip) .Take(limit) .Where(IsPrime) .ToList();当执行在断点处暂停时,您会注意到 LINQ 表达式上方显示了 浏览 LINQ 内嵌提示:

单击 浏览 LINQ 以打开 LINQ 可视化工具。 Rider 将在对话框中详细展示数据如何通过 LINQ 链的每一步流动:

使用此可视化工具查看数据在每个阶段的变化:
Range: 由
Enumerable.Range生成的初始序列。Skip:
跳过方法跳过的项数。Take: 由
参与选择的项子集。Where: 根据
IsPrime方法过滤的项。
逐步分析中间结果以发现问题。 例如,在此代码中,您会注意到数字
91包含在结果中,这表明IsPrime方法中存在错误。
浏览 LINQ 功能对于调试复杂的 LINQ 查询特别有用,因为它可以让查询的转换过程一目了然。
启用 LINQ Debugger 插件
此功能依赖于 LINQ Debugger 插件,该插件默认在 JetBrains Rider 中捆绑并启用。 如果相关功能不可用,请确保您未禁用该插件。
按下 Ctrl+Alt+S 打开设置,然后选择 。
打开 已安装 选项卡,找到 LINQ Debugger 插件,并选中插件名称旁边的复选框。
最后修改日期: 2025年 9月 26日