2013-07-08 70 views
2

我試圖讓一個返回表達式的字符串版本的通用方法:表達<Func鍵<T, bool>>方法參數

public string GetExpressionString(Expression<Func<T, bool>> expr) where T: class 
{ 
    return exp.Body.ToString(); 
} 

Cannot resolve symbol T

效果很好,如果我改變T到一個硬編碼類型。

我錯過了什麼?

回答

7

你需要申報T作爲方法的泛型類型參數:

public string GetExpressionString<T>(Expression<Func<T, bool>> exp) 
    where T: class 
{ 
    return exp.Body.ToString(); 
} 

// call like this 
GetExpressionString<string>(s => false); 
GetExpressionString((Expression<Func<string, bool>>)(s => false)); 

或者對父類:

public class MyClass<T> 
    where T: class 
{ 
    public string GetExpressionString(Expression<Func<T, bool>> exp) 
    { 
     return exp.Body.ToString(); 
    } 
} 

// call like this 
var myInstance = new MyClass<string>(); 
myInstance.GetExpressionString(s => false); 

延伸閱讀:

6

這是一個語法錯誤。您還沒有宣佈T作爲泛型類型參數

public string GetExpressionString<T>(Expression<Func<T, bool>> expr) where T: class 
{ 
    return exp.Body.ToString(); 
} 

通知<T>

相關問題