[英]How to get original expression for method parameter passed by value?
代碼示例:
public class A{
public void Check(bool condition){
Console.WriteLine(???);
}
public void Test_1(){
Check(2 > 3);
}
public void Test_2(){
int x=3;
Check(x != 6);
}
}
我需要在控制台中編寫方法Check不是參數condition的值,而是它的原始表達式。 例如,當在程序中調用方法Test_1時,我希望在控制台“ 2> 3”上看到它。 當在程序中調用方法Test_2時,我希望在控制台“ x!= 6”上看到它。
您可以在Check中使用System.Linq.Expressions作為參數,這將允許您使用lambda傳遞表達式。 一旦有了Lambda表達式,就可以使用LambdaExpression.Body來獲取字符串形式的表達式。
public static void Check(int n1, int n2, Expression<Func< int, int, bool>> exp)
{
var compiled = exp.Compile();
Console.WriteLine("Expression: " + exp.Body.ToString() + "\t Result: " + compiled.Invoke(n1,n2));
}
public void Test_1(){
int a = 2, b = 3;
Check(a,b, (x,y)=>x > y);
}
public void Test_2(){
int a=3;
int b=6;
Check(a,b, (x,y)=> x != y);
}
void Main()
{
Test_1();
Test_2();
}
產量
Expression: (x > y) Result: False
Expression: (x != y) Result: True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.