有了这个定义
public static HtmlTable<TRowModel> DisplayTable<TModel, TRows, TRowModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TRows>> expression, TRowModel rowModel = default(TRowModel)) where TRows : IEnumerable<TRowModel>
{
Func<TModel, TRows> deleg = expression.Compile();
TRows result = deleg(helper.ViewData.Model);
return new HtmlTable<TRowModel>(helper.ViewData.Model, result);
}
我可以像这样调用我的扩展方法
@(Html.DisplayTable(m => m.ListTest, new RowViewModel()).Render())
我希望能够明确指定TRowModel
类型,以便我可以像这样调用我的扩展程序
@(Html.DisplayTable<RowViewModel>(m => m.ListTest).Render())
或者更好,就像这样
@(Html.DisplayTable(m => m.ListTest).Render())
RowViewModel
因为我用where TRows : IEnumerable<TRowModel>
这可能在C#6中吗?如果没有,我有什么办法可以避免传递空物体,这样我就不必明确指定钻石中的每一种类型?
答案 0 :(得分:0)
注意:这篇文章只是为了让我将此问题标记为已解答
答案:在C#中,当涉及泛型时,必须明确指定 ALL ,除非他们可以 ALL 推断使用率。 this
参数是此规则的唯一例外。
感谢您@Peter B和@Atlasmaybe的回答。