2016-12-01 5 views
0

コードの関数またはイベントを実行する文字列が必要なところに詰まっています。文字列を関数に変換する:関数またはコードを実行する

string somestr = "fun"; 

は私が楽しい

public bool fun() 
{ 
    return true; 
} 

と呼ばれる機能を実行したい場合たとえば、私は、または「楽しい()」か何か「楽しいを実行」好きにsomestrを操作することができます。

私は最高の私が今まで考えている可能性は、私がチェックし、比較する文字列をスイッチケースに機能を実行したり

public void ReceivedCommand() 
{ 
    if(somestr == "fun") 
    { 
     bool b = fun(); 
    } 
    else if(somestr == "Otherfun") 
    { 
     //Some Other Function 
    } 
} 

のようなイベントを発生させなければならないイベントまたは関数を作成することです。しかし、今の場合は、私は何百もの機能といくつかのイベントを持ち、ユーザーはそれらのどれかを選ぶことができます。簡単な方法で私のことを解決できるものがなければならないと確信しています。代わりに多くのifとswitchを書いています。

これを行うにはどうしたらよい方向に向けるのでしょうか。

+1

これを確認してくださいp://stackoverflow.com/questions/6469027/call-methods-using-names-in-c-sharp – Prajwal

答えて

0

Reflectionを使用して、Type.GetMethod(methodName)を使用して、その名前で必要なメソッドを取得できます。 this

+1

[This]のようなもの(http://stackoverflow.com/questions/6469027/call-methods-using-名前のCシャープ)右? –

+0

お時間をいただきありがとうございます。私は見てみましょう –

0

反射を使用してください。このような何か:

Type type = this.GetType(); 
MethodInfo methodInfo = type.GetMethod(somestr); 
methodInfo.Invoke(this, userParameters); 

// And this requires "using System.Reflection;" 

または

thisリンクを試してみてください、私はそれが

+0

本当ですか? Lemmeはそれを試してみてください。しかし、それは動作しないようです。 –

+0

これは動作します、これを確認してくださいhttp://viralpatel.net/blogs/calling-javascript-function-from-string/ –

+0

これはJavascriptの質問ではありません。タグを見てください。 – elshev

0

働くあなたはこの

class MethodInvoker 
{ 
    delegate void TestDelegate(); 

    public void fun() 
    { 
     Console.WriteLine("fun"); 
    } 

    public void InvokeFromString(string functionName) 
    { 
     TestDelegate tDel =() => { this.GetType().GetMethod(functionName).Invoke(this, null); }; 
     tDel.Invoke(); 
    } 
} 

のように動的にそれを行うと、この

ようにそれを使用することができます願っています
var test = new MethodInvoker(); 
test.InvokeFromString("fun"); 
+0

これを試してみてください。私はそれがうまくいくと確信しています。 :) –

関連する問題