Generics C#6泛型只显式提供其中一种类型

Generics C#6泛型只显式提供其中一种类型,generics,lambda,html-helper,asp.net-mvc-5,c#-6.0,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 : IEnu

根据这个定义

    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);
    }
我希望能够显式地只指定
TRowModel
类型,以便像这样调用扩展名

@(Html.DisplayTable<RowViewModel>(m => m.ListTest).Render())
其中,
RowViewModel
可以从我用
限制lambda参数的事实推断出来,其中TRows:IEnumerable


这在C#6中可能吗?如果没有,我有什么办法可以避免传递空对象,这样我就不必显式地指定菱形中的每一种类型了?

注意:这篇文章只想让我把这个问题标记为已回答的问题

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


感谢并感谢您的回答。

如果所有泛型类型都可以从参数中推断出来,那么您可以将它们全部省略。如果不是所有类型都是可推断的,则必须指定所有类型(除了
参数)。有关更多信息,请参见伟大的Jon Skeet的回答:您确实可以推断泛型的用法,但如果您开始指定这些,则必须进行到底。它要么是
DoSomething(“foo”,1)
剂量测量(“条形”,2)编辑:@PeterB比我快谢谢你们两位的帮助。我现在对泛型有了更多的了解。我对此很不满意。。。这意味着我必须保留这个丑陋的,
新的RowViewModel()
,对于一个库来说,它既不友好也不美观。我想我没有办法使用
TRows
被迫成为
IEnumerable
的事实来使用
TRowModel
中的
TRows:IEnumerable
?如果这是可能的,我不会违背你刚才给我的规则“要么全部要么没有”。。。
@(Html.DisplayTable<RowViewModel>(m => m.ListTest).Render())
@(Html.DisplayTable(m => m.ListTest).Render())