0

我有以下代码:

 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()
    {

我会有很多这样的。他们都会返回一个字符串,并想知道是否有办法避免 switch case。如果有,如果方法不存在,有没有办法返回“未找到”?

谢谢

4

1 回答 1

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。

于 2013-02-28T18:29:42.830 回答