如何通过集合中的字符串值调用适当的方法?

时间:2015-08-20 08:58:09

标签: c# .net-4.0 switch-statement console-application

我有一组字符串。例如,

string[] coll={"1", "2", "3" ..."100"..."150"...} 

我有各自的字符串集方法,如

void Method1, void Method2, void Method100

我选择适当的方法:

string selector=string.Empty;
switch(selector)
 { case "1": 
            MethodOne();
            break;
    ........
    case "150":
            Method150();
            break;
  }

上面的代码真的很无聊,我将在字符串集合{“150”......“250”...}中有更多的字符串元素。      如何做到这一点:

 string sel=col[55];
 if(sel!=null)
        // call here the respective         method(method55)

我不想使用switch运算符,因为它会导致代码过剩。

3 个答案:

答案 0 :(得分:2)

解决方案1:

使用委托映射。这是更快的解决方案。

private static Dictionary<string, Action> mapping =
    new Dictionary<string, Action>
    {
        { "1", MethodOne },
        // ...
        { "150", Method150 }
    };

public void Invoker(string selector)
{
    Action method;
    if (mapping.TryGetValue(selector, out method)
    {
        method.Invoke();
        return;
    }

    // TODO: method not found
}

解决方案2:

使用反射。这个速度较慢,仅当您的方法具有严格的命名时才适用(例如,1 = MethodOne 150 = Method150不起作用)。

public void Invoker(string selector)
{
    MethodInfo method = this.GetType().GetMethod("Method" + selector);
    if (method != null)
    {
        method.Invoke(this, null);
        return;
    }

    // TODO: method not found
}

答案 1 :(得分:1)

您可以使用动态调用

 var methodName = "Method" + selector;
 var method = this.GetType().GetMethod(methodName);
 if (method == null)
 {
    // show error
 }
 else
    method.Invoke(this, null);

答案 2 :(得分:1)

您可以使用键和

等操作声明字典
Dictionary<string, Action> actions = new Dictionary<string, Action>()
{
    { "1", MethodOne },
    { "2", ()=>Console.WriteLine("test") },
    ............
};

并将其作为

调用
actions["1"]();

PS:在某处声明推定方法void MethodOne(){ }