-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);
      }

我在网上看到很多关于调用静态方法的示例,但我不知道如何从字符串中按名称调用 Public Void 方法。

有人有什么想法吗?非常感激!

4

4 回答 4

2

您可以使用反射

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

我建议使用 aswitch而不是尝试根据其名称调用该方法。

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

这具有确保您只接受有效参数的优点,并提供了一种在评估之前基于每个函数清理输入的方法(例如,您可能想从 WordTwo 中为一个函数去除空格,或者您想通过较长的一个作为第一个参数,无论顺序如何。)。

于 2013-01-10T18:51:01.733 回答
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 回答
0

假设方法是当前类型的实例方法:

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