我在表達式樹中做了一些工作。當您在一個表達式樹調用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()的用法,但我想這是一個編譯時的功能。當我執行此操作時,出現錯誤:
Expression of type 'System.Boolean' cannot be used for parameter of type 'System.String' of method 'Void Print(System.String)
不夠公平。但是,當我將其更改爲:
public Expression WithLog(Expression exp)
{
return Expression.Block(exp, Expression.Call(
typeof (Debug).GetMethod("Print",
new Type [] { typeof(string) }),
new [] { exp.ToString() }));
}
它不編譯。爲什麼?我需要做些什麼來解決這個問題?
它不會編譯,因爲該公司預計Expression's的'一個數組,但你給它一個字符串數組。你需要將它改成一個表達式,它在'Expression.Constant(exp)'上調用'ToString'' – Rob