从方法名称字符串动态调用方法?

时间:2013-02-28 18:26:26

标签: c# asp.net reflection

我有以下代码:

 public string GetResponse()
    {
        string fileName = this.Page.Request.PathInfo;
        fileName = fileName.Remove(0, fileName.LastIndexOf("/") + 1);

        switch (fileName)
        {
            case "GetEmployees":
                return GetEmployees();
            default:
                return "";
        }
    }

    public string GetEmployees()
    {

我会有很多这些。他们都将返回一个字符串,并想知道是否有办法避免切换案例。如果有的话,如果方法不存在,有没有办法返回“Not Found”?

由于

1 个答案:

答案 0 :(得分:1)

使用反射来获取方法:

public string GetResponse()
{
    string fileName = this.Page.Request.PathInfo;
    fileName = fileName.Remove(0, fileName.LastIndexOf("/") + 1);

    MethodInfo method = this.GetType().GetMethod(fileName);
    if (method == null)
        throw new InvalidOperationException(
            string.Format("Unknown method {0}.", fileName));
    return (string) method.Invoke(this, new object[0]);
}

这假设您调​​用的方法总是有0个参数。如果它们具有不同数量的参数,则必须相应地调整传递给MethodInfo.Invoke()的参数数组。

GetMethod有几个重载。此示例中的一个仅返回公共方法。如果要检索私有方法,则需要调用GetMethod的一个重载,该重载接受BindingFlags参数并传递BindingFlags.Private。