嵌套的通用类型参数

时间:2018-10-05 10:30:35

标签: c# generics inheritance interface encapsulation

此刻,我有一堂课:

ApiResponse<T> where T : IApiModel

如下所示:

ApiResponse<Contacts>

我想修改类型约束以使其看起来像这样:

ApiResponse<T1<T2>> where T1 : IApiModelCollection<T2> where T2 : IApiModel

然后这样称呼:

ApiResponse<Contacts<ContactDetails>>

我该如何实现?除非我指定每个用,分隔的类型参数,否则以上示例将不起作用,例如:

ApiResponse<T1, T2>

将这样称呼:

ApiResponse<Contacts, ContactDetails>

我想做些什么吗?还是有更好的方法?

这是一个示例类:

public class Contacts : IApiModelCollection<ContactDetails>
{
     // properties relevant to an api model collection
}

public class ContactDetails : IApiModel
{
    // etc...
}

界面如下:

IApiModelCollection<T> where T : IApiModel

任何建议都值得赞赏

1 个答案:

答案 0 :(得分:0)

您已经在接口中为IApiModelCollection定义了T,所以这样做不应该足够吗?

ApiResponse<T> where T : IApiModelCollection<IApiModel>

我发现的另一种尝试会有点难看:

ApiResponse<T1,T2> where T1 : IApiModelCollection<T2> where T2 IApiModel

然后您会打一个电话:

ApiResponse<Contacts<ContactDetails>, ContactDetails>

希望这会有所帮助。