C#6泛型仅明确提供其中一种类型

时间:2017-08-01 12:43:59

标签: generics lambda html-helper asp.net-mvc-5 c#-6.0

有了这个定义

    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中吗?如果没有,我有什么办法可以避免传递空物体,这样我就不必明确指定钻石中的每一种类型?

1 个答案:

答案 0 :(得分:0)

注意:这篇文章只是为了让我将此问题标记为已解答

答案:在C#中,当涉及泛型时,必须明确指定 ALL ,除非他们可以 ALL 推断使用率。 this参数是此规则的唯一例外。

感谢您@Peter B@Atlasmaybe的回答。