C# 6 泛型仅显式提供其中一种类型
C# 6 generics provide only one of the types explicitly
有了这个定义
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>
限制我的 lambda 参数这一事实推断出来的
这在 C#6 中可行吗?如果不是,我有什么替代方法可以避免传递空对象,这样我就不必明确指定钻石中的每种类型?
注意:这个post只是为了让我把这个问题标记为已回答
答案: 在 C# 中,当涉及泛型时,必须显式指定 ALL 除非它们可以 ALL 推断用法调用。 this
参数是此规则的唯一例外。
感谢@Peter B and @Atlasmaybe的回答。
有了这个定义
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 中可行吗?如果不是,我有什么替代方法可以避免传递空对象,这样我就不必明确指定钻石中的每种类型?
注意:这个post只是为了让我把这个问题标记为已回答
答案: 在 C# 中,当涉及泛型时,必须显式指定 ALL 除非它们可以 ALL 推断用法调用。 this
参数是此规则的唯一例外。
感谢@Peter B and @Atlasmaybe的回答。