How to call an appropriate method by string value from collection?

后端 未结 3 618
孤街浪徒
孤街浪徒 2021-01-28 13:06

I have a collection of strings. For example,

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

and I have respective methods for th

相关标签:
3条回答
  • 2021-01-28 13:30

    Solution 1:

    Use a delegate mapping. This is the faster solution.

    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
    }
    

    Solution 2:

    Use reflection. This is slower and is appropriate only if your methods have strict naming (eg. 1=MethodOne 150=Method150 will not work).

    public void Invoker(string selector)
    {
        MethodInfo method = this.GetType().GetMethod("Method" + selector);
        if (method != null)
        {
            method.Invoke(this, null);
            return;
        }
    
        // TODO: method not found
    }
    
    0 讨论(0)
  • 2021-01-28 13:45

    You can use dynamic invocation

     var methodName = "Method" + selector;
     var method = this.GetType().GetMethod(methodName);
     if (method == null)
     {
        // show error
     }
     else
        method.Invoke(this, null);
    
    0 讨论(0)
  • 2021-01-28 13:47

    You can declare a dictionary with your keys and actions like

    Dictionary<string, Action> actions = new Dictionary<string, Action>()
    {
        { "1", MethodOne },
        { "2", ()=>Console.WriteLine("test") },
        ............
    };
    

    and invoke it as

    actions["1"]();
    

    PS: Presuming method void MethodOne(){ } is declared somewhere.

    0 讨论(0)
提交回复
热议问题