将方法转换为`System.Delegate`以获取动作名称的`MethodInfo`?

时间:2014-05-11 13:31:31

标签: c# asp.net-mvc delegates

我正在尝试将方法转换为System.Delegate

Delegate method = (Delegate)MyMethod;

但这不起作用,因为我得到一个异常,告诉我MyMethod无法转换为非委托类型。

如何从方法中获取通用System.Delegate

目的是获取方法的MethodInfo.Name。所以我基本上希望将方法名称作为字符串“以强类型的方式”。我想为MVC创建一个帮助器,如下所示:

protected internal RedirectToRouteResult RedirectToAction(Func<ActionResult> action)
{ 
    return RedirectToAction(action.Method.Name);
}

然后我可以打电话给return RedirectToAction(Index);代替return RedirectToAction("Index"),因此请参阅Index的引用,并在编译时检查操作是否存在。但上面的帮助程序代码仅适用于无参数操作,因此我希望这适用于具有任何类型参数的操作,而无需为每个可能的参数星座指定重载。

1 个答案:

答案 0 :(得分:1)

使用Delegate.CreateDelegate

Func<string, string> funcToConvert = testMethod;

var del = Delegate.CreateDelegate(funcToConvert.GetType(), funcToConvert.Method);
var name = del.Method.Name;