【发布时间】:2015-12-01 00:30:59
【问题描述】:
我正在表达式树中做一些工作。当您在表达式树上调用 ToString() 时,您会得到一些可爱的诊断文本(这里是一个示例):
((Param_0.Customer.LastName == "Doe")
AndAlso ((Param_0.Customer.FirstName == "John")
Or (Param_0.Customer.FirstName == "Jane")))
所以我写了这段代码,试图用一些日志记录功能包装表达式:
public Expression WithLog(Expression exp)
{
return Expression.Block(exp, Expression.Call(
typeof (Debug).GetMethod("Print",
new Type [] { typeof(string) }),
new [] { exp } ));
}
我对推断 ToString() 用法的方法调用有一半的预期,但我认为这是一个编译时特性。当我执行此操作时,我收到错误:
“System.Boolean”类型的表达式不能用于“Void Print(System.String)”方法的“System.String”类型的参数
很公平。但是当我把它改成这样时:
public Expression WithLog(Expression exp)
{
return Expression.Block(exp, Expression.Call(
typeof (Debug).GetMethod("Print",
new Type [] { typeof(string) }),
new [] { exp.ToString() } ));
}
它无法编译。为什么?我需要做什么来解决这个问题?
【问题讨论】:
-
它无法编译,因为它需要一个
Expressions 的数组,但你给它的是一个字符串数组。您需要将其更改为在Expression.Constant(exp)上调用ToString的表达式
标签: c# expression-trees