相关疑难解决方法(0)

如何在lambda表达式中设置断点?

我想调试在表达式树中调用的lambda.不幸的是,断点永远不会被击中.

这是一个完整的控制台程序:

private static void Main()
{
    var evalAndWrite = EvalAndWrite(x => x + 1 /* a breakpoint here is never hit */);
    evalAndWrite(1);
    Console.ReadLine();
}

private static Action<int> EvalAndWrite(Expression<Func<int, int>> expr)
{
    var result = Expression.Variable(typeof(int), "result");
    var assign = Expression.Assign(result, expr.Body);
    var writeLine = Expression.Call(typeof(Console), nameof(Console.WriteLine), null, result);
    var body = Expression.Block(new[] {result}, assign, writeLine);
    return Expression.Lambda<Action<int>>(body, expr.Parameters[0]).Compile();
}
Run Code Online (Sandbox Code Playgroud)

如果我 lambda中设置一个断点(即x + 1使用F9),整条线在实际执行时会被拉断而不是lambda.

看看body我看到的调试视图:

.Block(System.Int32 $result) {
    $result = $x + 1;
    .Call …
Run Code Online (Sandbox Code Playgroud)

c# linq-expressions

5
推荐指数
1
解决办法
1652
查看次数

标签 统计

c# ×1

linq-expressions ×1