我有以下代码:
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”?
由于
答案 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。