2013-03-22 51 views
0

考慮下面的代碼..非stringly類型的反射

public static class Simulate 
{ 
    public static bool Boolean(bool b) 
    { 
     return b; 
    } 

} 

我想檢查,如果表達式使用這種靜電功能。我想避免stringly-typed思考,以便使代碼更易於重構,這就是爲什麼我要執行以下操作,類似於this。我嘗試下面的代碼:

protected virtual Expression VisitMethodCall(MethodCallExpression m) 
{ 

    if (m.Method == Simulate.Boolean) 

但是,這並不工作,所以我嘗試這樣做:

Expression<Action> fb =() => Simulate.Boolean(true); 

string booleanName = fb.Body.ToString(); 

if (m.Method.DeclaringType == typeof(Simulate)) 
{ 
    if (m.Method.Name == booleanName) 

但是,果然,上面的代碼返回布爾(真)。但是,有什麼辦法我只能得到布爾字符串?

回答

2

你可以從表達式的主體訪問MethodInfo,然後訪問它的名字,它會返回一個字符串布爾

Expression<Action> fb =() => Simulate.Boolean(true); 

var call = fb.Body as MethodCallExpression; 

if (call != null) 
    Console.WriteLine (call.Method.Name); //prints "Boolean" as a string 
+0

非常快!非常感謝!兩分鐘後我會接受它(stackoverflow限制) – 2013-03-22 09:56:51