我是C#的新手,想知道C#中是否有办法根据用户输入(字符串)调用函数而没有详细的switch语句,如:
switch (u.Action)
{
case "FunctionOne":
FunctionOne(u.Data);
break;
case "FunctionTwo":
FunctionTwo();
break;
etc...
}
虽然这样可以正常工作,但是一旦你有一长串这样的调用,这段代码就会变得有点笨拙。
感谢.........
答案 0 :(得分:2)
如果您的方法调用all可以接受相同的参数(例如,为了示例,可以使用Data
类型的一个参数),您可以使用Dictionary<string, Action<Data>>
:< / p>
Dictionary<string, Action<Data>> callMethodByString = new Dictionary<string, Action<Data>>();
..
您必须事先将不同的方法分配给字典,以便您可以使用它们:
callMethodByString.Add("ActionOne", ActionOne);
...
callMethodByString[u.Action](u.Data);
public void ActionOne(Data data)
{
...
}
答案 1 :(得分:0)
您也可以尝试使用委托,它们通常用于事件。因此,例如,如果要根据textBox中的用户输入使用方法,则必须引发事件然后使用委托。它们就像泛型类或结构一样,但泛型参数仅用于定义委托的调用约定。
检查msdn库中的documentation
同时检查此商品example
答案 2 :(得分:0)
查看System.Reflection
命名空间。
您可以使用obj.GetType()
或typeof(T)
获取对象的type info。然后GetMethod("SomeMethod")
让method info和methodInfo.Invoke(...)
调用该方法。
答案 3 :(得分:0)
你可以使用Reflection来做,但如果所有方法都接受相同的参数,这样做会更简单。