-1

私のアプリケーションは現在、データベースから呼び出す必要のあるメソッドのリストを読み込んで、それらを文字列に入れています。

これらのメソッドを名前で呼び出して、パラメーターを渡すことができるようにしたいと思います。

これが私が達成したいことの簡単な例です:

    protected void Page_Load(object sender, EventArgs e)
      {
          ...
          ...
          string MethodOne = "CombineText";
          string WordOne = "Hello";
          string WordTwo = "World";

          CombineText(WordOne, WordTwo);
      }

  public void CombineText(string WordOne, string WordTwo)
      {
          Console.WriteLine(WordOne+" "+WordTwo);
      }

静的メソッドの呼び出しについてオンラインで多くの例を見てきましたが、文字列から名前でPublicVoidメソッドを呼び出す方法を理解できません。

誰かアイデアはありますか?とても有難い!

4

4 に答える 4

2

リフレクションを使用できます。

MethodInfo mi = this.GetType().GetMethod(MethodOne);
mi.Invoke(this, new object[] { WordOne, WordTwo };
于 2013-01-10T18:47:30.780 に答える
1

switch名前に基づいてメソッドを呼び出そうとするのではなく、を使用することをお勧めします。

switch(MethodOne)
{
   case "CombineText":
     CombineText(WordOne, WordTwo);
     break;
   default:
     Console.WriteLine("Invalid function: " + MethodOne);
     break;
}

これには、有効な引数のみを受け入れるという利点があり、評価する前に関数ごとに入力をサニタイズする方法を提供します(たとえば、1つの関数のWordTwoからスペースを削除したい場合や、渡したい場合など)順序に関係なく、最初のパラメーターとして長い方が入力されます。)

于 2013-01-10T18:51:01.733 に答える
0

メソッドが現在のタイプのインスタンスメソッドであると仮定します。

MethodInfo method = this.GetType().GetMethod(MethodOne);
method.Invoke(this, new[] { WordOne, WordTwo });
于 2013-01-10T18:47:43.663 に答える
0

あなたは反射を見る必要があります。あなたはこのようなことをする必要があります:

Type type = GetType();
MethodInfo method = type.GetMethod(Method);
Method.Invoke(this, new object[] { WordOne, WordTwo });

http://msdn.microsoft.com/en-us/library/8zz808e6.aspx

http://msdn.microsoft.com/en-us/library/a89hcwhh.aspx

于 2013-01-10T18:50:42.360 に答える