我正在努力改变
@{Html.RenderAction("Foo", "TheAction");}
至
@{Html.RenderAction((FooController c) => c.TheAction );}
这在很多方面都更好,它改进了:
- F12-导航
 - 类型使用检测(resharper 等)
 - 方法使用检测
 - 严格
 - ...使死链接远离项目的可能性
 
...所以我写了一个这样的扩展类:
using System;
using System.Linq.Expressions;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace V3NET.MVC.Extensions
{
    public static class HtmlHelperExtension
    {
        public static void RenderAction<T>
            (this HtmlHelper helper, Expression<Func<T, Func<int, int?, ActionResult>>> action)
        {
            var actionName =
                (
                    (MethodInfo)
                    (
                        (ConstantExpression)
                        (
                            (MethodCallExpression)
                            (
                                ((UnaryExpression)action.Body).Operand
                            )
                        ).Object
                    ).Value
               ).Name;
            var controllerType = action.Parameters[0].Type;
            var controllerName = new Regex("Controller$").Replace(controllerType.Name, "");
            helper.RenderAction(actionName, controllerName);
        }
    }
}
...但是正如您所看到的,我必须针对采取 int, int? 作为论据。
我如何更一般地表达这一点,这样我就不必编写无数的重载?