根据其他变量动态调用方法

joe*_*elc 3 c#

可能重复:
如何使用其名称调用方法?

厌倦了使用switch/case语句.我想知道是否有某种方法可以根据用户提供的值调用方法.明白为什么这是一个坏主意可能有一百万个理由,但这就是我在想的:

Console.Write("What method do you want to call? ");
string method_name = Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

然后以某种方式调用'method_name'中包含的方法.这甚至可能吗?

Chr*_*tow 6

你可以使用反射:

var type = typeof(MyClass);
var method = type.GetMethod(method_name);
method.Invoke(obj, params);
Run Code Online (Sandbox Code Playgroud)

如果您希望类型是动​​态的以及方法,那么使用它而不是typeof(MyClass):

var type = Type.GetType(type_name);
Run Code Online (Sandbox Code Playgroud)


cod*_*ion 5

很多时候你可以将switch语句重构为字典......

switch (caseSwitch)
{
    case 1: 
        Console.WriteLine("Case 1");
        break;
    case 2:
        Console.WriteLine("Case 2");
        break;
    case 3:
        Console.WriteLine("Case 3");
        break;
}
Run Code Online (Sandbox Code Playgroud)

可以变成 ...

var replaceSwitch = new Dictionary<int, Action>
    {
        { 1, () => Console.WriteLine("Case 1") }
        { 2, () => Console.WriteLine("Case 2") }
        { 3, () => Console.WriteLine("Case 3") }
    }

...

replaceSwitch[value]();
Run Code Online (Sandbox Code Playgroud)

这是一个非常微妙的转变似乎没有太大的收获,但实际上它更好,更好.如果你想知道原因,这篇博文可以很好地解释它.