2015-03-02 67 views
2

該代碼例如:如何獲取通過值傳遞的方法參數的原始表達式?

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

我需要編寫到控制檯中方法檢查不值參數條件的,但其原有的表達。例如,當在程序中調用Test_1方法時,我想在控制檯「2> 3」上看到。當在程序中調用方法Test_2時,我想在控制檯「x!= 6」上看到。

+0

傳遞表達爲字符串類型參數的檢查方法 – Adil 2015-03-02 07:39:32

+0

正如@Adil說,現在檢查只接收「真」或「假」,就是這樣。 – Dasanko 2015-03-02 07:41:37

+2

您可以將您的條件作爲lambda傳遞,然後使用'Expression'將lambda的主體轉換爲字符串。 – Spo1ler 2015-03-02 07:42:08

回答

0

您可以使用System.Linq.Expressions作爲Check中的參數,這將允許您使用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 
相關問題