在c#中动态调用带有字符串名称的Void方法

本文关键字:Void 方法 字符串 动态 调用 | 更新日期: 2023-09-27 17:51:12

我的应用程序目前正在从数据库中读取我需要调用的方法列表,并将它们放入字符串中。

我希望能够通过这些方法的名称调用它们,并向它们传递参数。

下面是我想要实现的一个简单的例子:

    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方法。

有人有什么想法吗?感谢!

在c#中动态调用带有字符串名称的Void方法

可以使用反射

MethodInfo mi = this.GetType().GetMethod(MethodOne);
mi.Invoke(this, new object[] { WordOne, WordTwo };

我建议使用switch,而不是尝试根据它的名称调用方法。

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

这样做的好处是确保您只接受有效的参数,并提供了一种在求值之前对每个函数的输入进行消毒的方法(例如,您可能希望为一个函数从WordTwo中删除空格,或者您希望将较长的字符串作为第一个参数传递,而不管顺序如何)。

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

MethodInfo method = this.GetType().GetMethod(MethodOne);
method.Invoke(this, new[] { WordOne, WordTwo });

您需要查看反射。你需要做这样的事情:

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