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"
我需要打印源代码中编写的 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"