【问题标题】:c# calling a method by string value [duplicate]c#通过字符串值调用方法[重复]
【发布时间】:2012-02-18 10:28:03
【问题描述】:

可能重复:
Calling a function from a string in C#

我想从另一个类调用一个类中的一个方法。 问题是我事先不知道方法名称,我从外部 API 获取它..

例子:

class A
    public class Whichone
    {
        public static string AA() { return "11"; }
        public static string BB() { return "22"; }
        public static string DK() { return "95"; }
        public static string ZQ() { return "51"; }
        ..............
    }


class B
    public class Main
    {
        ........
        ........
        ........
        string APIValue = API.ToString();
        string WhichOneValue = [CALL(APIValue)];
    }

假设 APIValue 是 BB,那么 WhichOneValue 的值应该是 22。 这样做的正确语法是什么?

【问题讨论】:

标签: c# class methods


【解决方案1】:

你可以使用反射:

string APIValue = "BB";

var method = typeof(Whichone).GetMethod(APIValue);

// Returns "22"
// As BB is static, the first parameter of Invoke is null
string result = (string)method.Invoke(null, null);

【讨论】:

  • @user1199838 如果APIValue == "BB",它不返回null,而是一个MethodInfo 实例。
  • @user1199838 如果答案满足您的需求,也许您应该考虑accepting it,这样人们就会知道这个问题得到了回答。
【解决方案2】:

这称为reflection。在您的情况下,代码如下所示:

string WhichOneValue =
    (string)typeof(Whichone).GetMethod(APIValue).Invoke(null, null);

反射的一个缺点是它比正常的方法调用慢。因此,如果分析显示调用这样的方法对您来说太慢,您应该考虑替代方案,例如 Dictionary<string, Action>Expressions。

【讨论】:

  • +1 用于提及Dictionary<string, Action>,尽管在这个特定示例中它是Dictionary<string, Func<string>>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
相关资源
最近更新 更多