public class Test { public int Id { get; set; } }
class Program
{
static void Main(string[] args)
{
var model = new Test { Id = 222 };
Helpers.TestMethod(m => model.Id); // doesn't work
Helpers.TestMethod<Test, int>(m => model.Id); // works
Console.ReadKey();
}
}
public class Helpers
{
public static string TestMethod<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
{
// Do some work on expression
return string.Empty;
}
}
如果我使用@ Html.TextBoxFor扩展方法。我不必像这样指定类型:@ Html.TextBoxFor,这是为什么?为什么我必须明确指定类型?
答案 0 :(得分:3)
如何推断
Model
的{{1}}?当我从未指定Html.TextBoxFor
时。
如果您查看Html.TextBoxFor<Test, int>
的实施方式,您会发现它是一种扩展方法:
TextBoxFor
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
用于推断htmlHelper
,这正是您的方法所缺失的。
TModel
现在您可以在不指定泛型类型的情况下调用它:
public static string TestMethod<TModel, TProperty>(TModel model, Expression<Func<TModel, TProperty>> expression)
您还可以将其作为扩展方法,添加var model = new Test { Id = 222 };
TestMethod(model, m => m.Id); // works just fine
修饰符
this
允许你调用它
public static string TestMethod<TModel, TProperty>(this TModel model, Expression<Func<TModel, TProperty>> expression)