我正在尝试将方法转换为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
的引用,并在编译时检查操作是否存在。但上面的帮助程序代码仅适用于无参数操作,因此我希望这适用于具有任何类型参数的操作,而无需为每个可能的参数星座指定重载。
答案 0 :(得分:1)
使用Delegate.CreateDelegate
Func<string, string> funcToConvert = testMethod;
var del = Delegate.CreateDelegate(funcToConvert.GetType(), funcToConvert.Method);
var name = del.Method.Name;