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的回答。