I have a collection of strings. For example,
string[] coll={\"1\", \"2\", \"3\" ...\"100\"...\"150\"...}
and I have respective methods for th
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
}
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);
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.