2011-08-14 42 views
0

我是新來的C#,想知道是否有在C#的方式來調用基於用戶輸入(字符串)函數沒有一個詳細的switch語句如:C#相當於PHP call_user_func

switch (u.Action) 
    { 
     case "FunctionOne": 
      FunctionOne(u.Data); 
      break; 
     case "FunctionTwo": 
      FunctionTwo(); 
      break; 
     etc... 
    } 

雖然這工作正常,一旦你有這樣的調用很長的列表,這段代碼變得有點笨拙。

感謝.........

回答

2

如果你的方法調用都可以接受相同的參數(假設爲Data型的例子一個參數的緣故),你可以使用一個Dictionary<string, Action<Data>>

Dictionary<string, Action<Data>> callMethodByString = new Dictionary<string, Action<Data>>(); 
.. 

你將不得不分配不同的方法來字典事先所以你可以使用它們:

callMethodByString.Add("ActionOne", ActionOne); 
... 
callMethodByString[u.Action](u.Data); 


public void ActionOne(Data data) 
{ 
    ... 
} 
0

您也可以嘗試使用代表,它們通常與事件一起使用。因此,例如,如果您想使用取決於用戶在文本框中的輸入的方法,則必須提出事件並使用委託。它們就像泛型類或結構一樣,但通用參數僅用於定義委託的調用約定。

檢查documentation MSDN庫

還要檢查這個好example

0

看看在System.Reflection命名空間。

您可以使用obj.GetType()typeof(T)來獲得您的對象的type info。然後GetMethod("SomeMethod")得到method infomethodInfo.Invoke(...)來調用該方法。

0

你可以用Reflection做到這一點,但如果你的所有方法都接受相同的參數,那麼做起來會簡單得多。