2014-09-04 77 views
1

嗨有沒有辦法創建一種方法,接受任何種類的方法?我的意思是任何類型的參數已經或有多少參數有用動態動作參數創建一個方法

void SampleMethod(Action<dynamic> Action) 
{ 
} 

目前,我正在做它喜歡它,但我認爲我做錯了,有沒有辦法做到這一點?無論它有一個參數還是很多或沒有參數。

我做錯了,或者我錯過了什麼?

我已經試過這個代碼

void SampleMethod(Action Action) 
{ 
} 

,但它似乎只接受該方法不帶參數 我做錯了什麼?

+5

你怎麼想的方法呢?不知道它有多少參數以及它們是哪種類型,你打算怎樣稱呼它? – nvoigt 2014-09-04 10:35:35

回答

1

與反思,

SampleMethod(this.GetType().GetMethod("WriteHello"), "Hello"); 

    public void WriteHello(string param) 
    { 
     Debug.WriteLine(param); 
    } 

    public void SampleMethod(MethodInfo mi, params object[] arguments) 
    { 
     mi.Invoke(this,arguments);   
    } 
+0

順便說一句,我們可以用更多的思考來擴展這種方法。但我認爲如果我們將設置方法params。我們應該首先了解他們,因此沒有任何意義可以找到那種參數。我只是根據我對問題的理解來回答。 – 2014-09-04 11:03:43

1

我認爲Delegate是你在找什麼。

static void A1() { 
    Console.Out.WriteLine("A1"); 
} 

static void A2(int foo) { 
    Console.Out.WriteLine("A2"); 
} 

static void SampleMethod(Delegate dlgt) { 
} 

用法:

SampleMethod(new Action(A1)); 
SampleMethod(new Action<int>(A2)); 

您可以通過DynamicInvoke(調用方法),但是你必須提供準確的參數列表。

static void SampleMethod(Delegate dlgt) { 
    // ok for A1, will throw an exception for A2 
    dlgt.DynamicInvoke(null); 
}