C#相当于php call_user_func

时间:2011-08-14 16:33:53

标签: c# .net

我是C#的新手,想知道C#中是否有办法根据用户输入(字符串)调用函数而没有详细的switch语句,如:

    switch (u.Action)
    {
        case "FunctionOne":
            FunctionOne(u.Data);
            break;
        case "FunctionTwo":
            FunctionTwo();
            break;
        etc...
    }

虽然这样可以正常工作,但是一旦你有一长串这样的调用,这段代码就会变得有点笨拙。

感谢.........

4 个答案:

答案 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 infomethodInfo.Invoke(...)调用该方法。

答案 3 :(得分:0)

你可以使用Reflection来做,但如果所有方法都接受相同的参数,这样做会更简单。