【问题标题】:Call a void from a string [duplicate]从字符串中调用 void [重复]
【发布时间】:2026-01-28 11:05:02
【问题描述】:

我的应用程序在运行时将方法名称定义为字符串。我想从字符串中调用该方法。

例子

private void ButtonClick(){
    string goVoid;
    goVoid = "testVoid";
    goVoid(); // Calling testVoid
}

testVoid(){
    //code
}

【问题讨论】:

  • 我的直觉告诉我你正在尝试做一些 Cthulhu 的事情,错误......这里是 PHP 方式......如果你必须,你可以使用反射来做到这一点,但也许你应该解释你需要做这样的事情的真正原因。请阅读the XY problem
  • 看看reflection.. 但我会首先考虑为您的应用程序建模的其他方法。
  • @LucasTrzesniewski,我应该删除我的答案并将其作为重复发布吗?
  • @OrelEraki 好吧,Enigmativity 欺骗了这个问题(无论如何我自己都在做这件事)。我会说别管它,你给代码适当的归属,所以它的存在是无害的。

标签: c# string call void


【解决方案1】:

你不能通过普通直接的方式单独指定字符串名称来调用方法,你只能通过使用反射来做到这一点。 其他方法不是动态的,可能是 switch 流控制,它将根据匹配调用您需要的方法。

对于以下您将需要System.Reflection

string methodName = "testVoid";
Type thisType = this.GetType();
MethodInfo theMethod = thisType.GetMethod(methodName);
theMethod.Invoke(this, null);

来源: https://*.com/a/540075/303254

【讨论】:

  • 如果testVoidprivate,OP 可能需要使用绑定标志BindingFlags.NonPublic | BindingFlags.Instance。他的代码在这方面不是很清楚。
  • 你说得对,我不想把事情搞得太复杂,我还在想是否要删除我的答案并将其标记为重复。