2011-09-16 2 views
1

私は数学/統計ソフトウェアを開発しています。入力文字列を解析してターゲット関数を呼び出す方法は?

Function1(value) 

次に、私の内部ソフトウェア機能に電話してください。 これは 'パーサー'のようですか?私はこのようなコードでそれを解決するために考えている瞬間

switch(my_parsed_function_string) { 
     case "function1": 
      result = function1(value); 
     case "function2": 
      result = function2(value); 
    ... 
    ... 
    } 

は、よりエレガントな方法はありますか? 文字列に 'function'という名前が含まれていて、余分な開発者の手間をかけずにランチすることができますか?

あなたはメソッド名を取得するためにそれを反映して、その後、単一のオブジェクト内のすべての関数を宣言することができ、事前

答えて

2

はい、あります。それはIDictionaryと呼ばれています。具体的には、あなたの場合はIDictionary<string, Func<double>>のようになります。したがって、コードは

に変わります
var functions = new Dictionary<string, Func<double>>(); 
var act = functions[my_parsed_function_string].Invoke(arg); 
-2

でいただきありがとうございますか!

1

Command Patternを使用できます。たとえば:

ICommand command = commands[parsedFunctionName] as ICommand; 
if(command != null) 
{ 
    command.Execute(); 
} 

interface ICommand 
{ 
    void Execute();  
} 

class Function1Command : ICommand 
{ 
    public void Execute() 
    { 
     // ... 
    } 
} 

class Function2Command : ICommand 
{ 
    public void Execute() 
    { 
     // ... 
    } 
} 

// Bind commands 
IDictionary<string, ICommand> commands = new Dictionary<string, ICommand>(); 
commands["Function1"] = new Function1Command(); // function 1 
commands["Function2"] = new Function2Command(); // function 2 
// ... 

その後は、このようなあなたの関数を呼び出すことができます

関連する問題