C# linq 表达式更适合字符串

C# linq expression a better to string

我需要打印源代码中编写的 linq 表达式。我已经搜索了解决方案,但到目前为止,建议使用 expr.ToString().

这对我不起作用。例如,如果我有一个表达式:

Expression<Func<int, int>> expr = v => v + 1;

ToString() 会 return v => (v + 1)

现在如果我对上面的案例稍作修改

var a = 3;
Expression<Func<int, int>> expr = v => v + a;

然后是 ToString() returns v => (v + value(Program+<>c__DisplayClass0_0).a)。我正在寻找类似 v => (v + a)

的内容

我当前的用例是我有一组声明为 Expression<Func<TSource, ValidationResult>> 的规则,然后我需要对执行它们所花费的时间进行基准测试,为此我需要正确地标记它们。规则上的 ToString() 将生成可读性不佳的字符串;就像上面的例子一样,调用 class 中未定义的任何内容都将以一个长字符串作为前缀,指示令牌的来源。

您可以使用 ReadableExpressions 打印出来:

var a = 3;
Expression<Func<int, int>> expr = v => v + a;

expr.ToReadableString(); // "v => v + a"