如何获取值传递的方法参数的原始表达式?

时间:2015-03-02 07:37:00

标签: c# methods parameter-passing

代码示例:

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);
    }
}

我需要在方法中写入控制台检查参数 condition 的值,而不是其原始表达式。例如,当在程序I中调用方法Test_1时,希望在控制台上看到" 2> 3&#34 ;.当在程序I中调用方法Test_2时,我希望在控制台上看到" x!= 6"。

1 个答案:

答案 0 :(得分:0)

您可以在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