簡體   English   中英

如何獲得通過值傳遞的方法參數的原始表達式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM