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