Вложенные параметры универсального типа - PullRequest
0 голосов
/ 05 октября 2018

На данный момент у меня есть класс:

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 голосов
/ 05 октября 2018

Вы уже определили свой T для IApiModelCollection в интерфейсе, поэтому разве этого не должно быть достаточно, чтобы сделать что-то подобное?

ApiResponse<T> where T : IApiModelCollection<IApiModel>

Другая найденная мною попытка была бы немного уродливее:

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

Тогда у вас будет звонок типа:

ApiResponse<Contacts<ContactDetails>, ContactDetails>

Надеюсь, это немного поможет.

...