C# 如何更改方法签名/属性以匹配给定的执行示例?

C# 如何更改方法签名/属性以匹配给定的执行示例?,c#,asp.net-mvc,linq,lambda,extension-methods,C#,Asp.net Mvc,Linq,Lambda,Extension Methods,所以我有这个: public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Expression<Func<TModel, ControlPermissionType>> mode) { MvcH

所以我有这个:

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, Expression<Func<TModel, ControlPermissionType>> mode)
{
    MvcHtmlString value = null;
    var modeIn = ModelMetadata.FromLambdaExpression(
                    mode, htmlHelper.ViewData
                ).Model;
    switch ((ControlPermissionType)modeIn)
    {
        case ControlPermissionType.Read:
            value = htmlHelper.TextBoxFor(expression, new { @readonly = "readonly" });
            break;
        case ControlPermissionType.Edit:
            value = htmlHelper.TextBoxFor(expression);
            break;
        case ControlPermissionType.Deny:
            value = new MvcHtmlString(string.Empty);
            break;
    }
    return value;
}
public static MvcHtmlString TextBoxFor(此HtmlHelper HtmlHelper、表达式、表达式模式)
{
MvcHtmlString值=null;
var modeIn=modelmetada.FromLambdaExpression(
模式,htmlHelper.ViewData
).模型;
开关((控制权限类型)模式输入)
{
案例控制许可类型。读取:
value=htmlHelper.TextBoxFor(表达式,new{@readonly=“readonly”});
打破
案例控制权限类型。编辑:
value=htmlHelper.TextBoxFor(表达式);
打破
案例控制权限类型。拒绝:
值=新的MvcHtmlString(string.Empty);
打破
}
返回值;
}
我这样称呼它:

@Html.TextBoxFor(a=>a.First().BirthDate,a=>a.First().Mode)

但我想要的是:

@Html.TextBoxFor(a=>a.First().BirthDate,a.Mode)

怎么做

编辑:

甚至
@Html.TextBoxFor(a=>a.First().BirthDate)
但是如何通过这种方式检查
a
是否正在实现接口

EDIT2:
@Html.TextBoxFor(a=>a.First().BirthDate,a=>a.First().Mode)

需要方法签名:

public static MvcHtmlString TextBoxFor(此HtmlHelper、表达式表达式、表达式模式)


@Html.TextBoxFor(a=>a.First().BirthDate,a.Mode)

需要方法签名:

public static MvcHtmlString TextBoxFor(此HtmlHelper、表达式表达式、控制权限类型模式)


@Html.TextBoxFor(a=>a.First().BirthDate)

需要方法签名:

public static MvcHtmlString TextBoxFor(此HtmlHelper HtmlHelper,表达式表达式)

但在最后一种情况下,您错过了ControlPermissionType


顺便说一句,如果您试图使用
@Html.TextBoxFor(a=>a.First().BirthDate)
调用您的方法,编译器错误应该是不言自明的,说明需要哪个签名方法。

对于接口部分,只需添加
where TModel:IMyInterface
。对于第一部分,您的
TModel
是一个集合,这似乎很奇怪,我真的不知道您要做什么,为什么不干脆
ControlPermissionType模式
而不是
Expression模式
,然后
切换(模式){…
?@StephenMuecke因为模型是在
黑盒
系列中创建的如果它在黑盒中,你会如何更改它的参数?你必须创建一个带有你想要的签名的包装器。@Panda as black box我的意思是我不能更改我得到的数据。但我知道我得到了什么,不幸的是,有时我们不得不使用奇怪的solu关于编译器错误,您是对的,我通过简单地更改方法名称来修复它。另外,
public static MvcHtmlString TextBoxFor(此HtmlHelper HtmlHelper,Expression Expression,ControlPermissionType模式)
是错误的,因为它没有看到
a