2010-08-02 62 views
4

我想讓一個類來處理使用我自己的方式在遠程服務器上調用方法。爲了讓客戶端調用者更容易,我正在編寫一個接受接口的泛型類,以便編譯器知道參數的數量和方法的返回類型。你如何檢查傳遞給委託的參數?

public class Service<TInterface> 
{ 
    public TResult Invoke<TResult>(Func<TInterface, TResult> function) 
    { 
     // Do the work 
    } 
} 

這樣的想法是,他們可以參考具有接口的組件,例如:

public interface ICalculator 
{ 
    int Add(int num1, int num2); 
} 

然後他們可以編寫代碼來打這樣的服務:

var addend = new Service<ICalculator>(/* constructor */).Invoke(s => s.Add(3, 4)); 

問題是,在第一個代碼塊中,我需要知道如何找出它們在lamda表達式中傳遞的參數。我怎麼做?

回答

6

最簡單的方法是改爲Expression<Func<TInterface,TResult>;這是微不足道的分開。事實上,您可以解除涵蓋大多數場景的代碼from here。特別是,看看ResolveMethod。對此的一些討論/解釋是here

+0

對,好友。就是這樣。 =) – 2010-08-02 14:42:03

相關問題