c#按字符串值调用方法

时间:2012-02-18 10:28:04

标签: c# class methods

  

可能重复:
  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。 这样做的正确语法是什么?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

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

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

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